Tôi đến bữa tiệc muộn vài năm nhưng tôi gặp phải trường hợp ngoại lệ tương tự khi cố gắng để Hibernate 3.5.1 hoạt động với HSQLDB và chương trình JavaFX trên máy tính để bàn. Tôi đã làm cho nó hoạt động với sự giúp đỡ của chủ đề này và rất nhiều thử nghiệm và lỗi. Có vẻ như bạn gặp lỗi này cho một loạt các vấn đề:
No Persistence provider for EntityManager named mick
Tôi đã thử xây dựng các ví dụ hướng dẫn ngủ đông nhưng vì tôi đang sử dụng Java 10 nên tôi không thể khiến chúng xây dựng và chạy dễ dàng. Tôi đã từ bỏ điều đó, không thực sự muốn lãng phí thời gian để khắc phục vấn đề của nó. Thiết lập tệp module-info.java (Jigsaw) là một kiểu tóc khác mà nhiều người chưa phát hiện ra.
Hơi khó hiểu là những cái này (bên dưới) là hai tệp duy nhất tôi cần trong tệp build.gradle của mình. Tài liệu Hibernate không rõ ràng về chính xác những lọ bạn cần đưa vào. Trình quản lý thực thể đã gây nhầm lẫn và không còn cần thiết trong phiên bản Hibernate mới nhất và javax.persistence-api cũng không còn. Lưu ý, tôi đang sử dụng Java 10 ở đây vì vậy tôi phải đưa jaxb-api vào, để khắc phục một số lỗi liên kết xml, cũng như thêm một mục nhập cho mô đun lưu trữ java trong tệp module-info.java của tôi.
Build.gradle
// https://mvnrepository.com/artifact/org.hibernate/hibernate-core
compile('org.hibernate:hibernate-core:5.3.1.Final')
// https://mvnrepository.com/artifact/javax.xml.bind/jaxb-api
compile group: 'javax.xml.bind', name: 'jaxb-api', version: '2.3.0'
Module-info.java
// Used for HsqlDB - add the hibernate-core jar to build.gradle too
requires java.persistence;
Với chế độ ngủ đông 5.3.1, bạn không cần chỉ định nhà cung cấp, bên dưới, trong tệp kiên trì của bạn. Nếu một cái không được cung cấp, nhà cung cấp Hibernate được chọn theo mặc định.
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
Tệp Tệpenceence phải được đặt trong thư mục chính xác để:
src/main/resources/META-INF/persistence.xml
Bước qua mã nguồn ngủ đông trong trình gỡ lỗi Intellij, nơi nó kiểm tra một phương ngữ, cũng đã ném ngoại lệ chính xác tương tự, vì một thuộc tính phương ngữ bị thiếu trong tệp Persence.xml. Tôi đã thêm cái này (thêm cái đúng cho loại DB của bạn):
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
Sau đó, tôi vẫn có ngoại lệ tương tự, vì vậy bước qua trình gỡ lỗi một lần nữa trong Intellij đã tiết lộ thực thể kiểm tra mà tôi đang cố gắng duy trì (ví dụ đơn giản giữa cha mẹ và con) đã bỏ lỡ các chú thích cho các mối quan hệ OneToMany, ManyToOne. Tôi đã sửa lỗi này và ngoại lệ biến mất và các thực thể của tôi vẫn tồn tại ổn.
Đây là tệp bền vững cuối cùng của tôi:
<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>
Tôi có lẽ đã lãng phí khoảng nửa ngày cho viên ngọc này. Lời khuyên của tôi sẽ là bắt đầu rất đơn giản - một thực thể thử nghiệm duy nhất có một hoặc hai trường, vì có vẻ như ngoại lệ này có thể có nhiều nguyên nhân.