Partiye birkaç yıl geç kaldım ama aynı istisnayı HSQLDB ve masaüstü JavaFX programı ile çalışan Hibernate 3.5.1'i almaya çalışırken yakaladım. Bu iş parçacığının ve birçok deneme yanılmanın yardımıyla çalışmasını sağladım. Görünüşe göre bu hatayı çok çeşitli sorunlar için alıyorsunuz:
No Persistence provider for EntityManager named mick
Hazırda bekletme öğretici örneklerini oluşturmayı denedim, ancak Java 10 kullandığım için onları kolayca oluşturup çalıştırmalarını sağlayamadım. Ondan vazgeçtim, sorunlarını çözmek için gerçekten zaman harcamak istemiyordum. Module-info.java dosyası (Jigsaw) oluşturmak, birçok insanın henüz keşfetmediği başka bir tüy yumağıdır.
Biraz kafa karıştırıcı, bunların (aşağıda) build.gradle dosyamda ihtiyacım olan tek iki dosya olması. Hazırda Bekletme belgeleri tam olarak hangi Kavanozları eklemeniz gerektiği konusunda net değil. Varlık yöneticisi kafa karışıklığına neden oluyordu ve artık en son Hibernate sürümünde gerekmiyor, ne de javax.persistence-api. Not, burada Java 10 kullanıyorum, bu nedenle bazı xml-bind hatalarını gidermek için jaxb-api'yi eklemem ve module-info.java dosyama java kalıcılık modülü için bir giriş eklemem gerekti.
Build.gradle
compile('org.hibernate:hibernate-core:5.3.1.Final')
compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'
Module-info.java
requires java.persistence;
Hazırda bekletme 5.3.1 ile birlikte, aşağıda, persistence.xml dosyanızda sağlayıcıyı belirtmeniz gerekmez. Sağlanmamışsa, Hazırda Bekletme sağlayıcısı varsayılan olarak seçilir.
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
Kalıcılık.xml dosyası doğru dizinde bulunmalıdır, bu nedenle:
src/main/resources/META-INF/persistence.xml
Bir lehçe için kontrol yaptığı Intellij hata ayıklayıcısındaki hazırda bekletme kaynak kodunda ilerlemek de, persistence.xml dosyasındaki eksik bir lehçe özelliği nedeniyle aynı istisnayı attı. Bunu ekledim (DB türünüz için doğru olanı ekleyin):
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
Bundan sonra hala aynı istisnaya sahibim, bu yüzden Intellij'de hata ayıklayıcıya tekrar adım atmak, devam etmeye çalıştığım test varlığının (basit ebeveyn-çocuk örneği) OneToMany, ManyToOne ilişkileri için eksik ek açıklamaları olduğunu ortaya çıkardı. Bunu düzelttim ve istisna ortadan kalktı ve varlıklarım kalıcı oldu.
İşte tam son persistence.xml'im:
<persistence xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_1.xsd"
version="2.1">
<persistence-unit name="mick" transaction-type="RESOURCE_LOCAL">
<description>
Persistence unit for the JPA tutorial of the Hibernate Getting Started Guide
</description>
<!-- Provided in latest release of hibernate
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
-->
<class>com.micks.scenebuilderdemo.database.Parent</class>
<class>com.micks.scenebuilderdemo.database.Child</class>
<properties>
<property name="javax.persistence.jdbc.driver" value="org.hsqldb.jdbc.JDBCDriver"/>
<property name="javax.persistence.jdbc.url"
value="jdbc:hsqldb:file:./database/database;DB_CLOSE_DELAY=-1;MVCC=TRUE"/>
<property name="javax.persistence.jdbc.user" value="sa"/>
<property name="javax.persistence.jdbc.password" value=""/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.hbm2ddl.auto" value="create"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
</properties>
</persistence-unit>
</persistence>
Muhtemelen bu mücevher için yaklaşık yarım günümü boşa harcadım. Benim tavsiyem çok basit bir şekilde başlamaktır - bir veya iki alanlı tek bir test varlığı, çünkü bu istisnanın birçok nedeni olabilir gibi görünüyor.