ฉันไปงานเลี้ยงมาหลายปีที่นี่ แต่ฉันก็มีข้อยกเว้นเดียวกันในขณะที่พยายามทำให้ Hibernate 3.5.1 ทำงานร่วมกับ HSQLDB และโปรแกรม JavaFX บนเดสก์ท็อป ฉันได้รับมันเพื่อทำงานด้วยความช่วยเหลือของหัวข้อนี้และการทดลองและข้อผิดพลาดมากมาย ดูเหมือนว่าคุณจะได้รับข้อผิดพลาดนี้จากปัญหาที่หลากหลาย:
No Persistence provider for EntityManager named mick
ฉันพยายามสร้างตัวอย่างบทแนะนำการจำศีล แต่เพราะฉันใช้ Java 10 ฉันไม่สามารถให้พวกเขาสร้างและทำงานได้อย่างง่ายดาย ฉันยอมแพ้กับสิ่งนั้นไม่ต้องการเสียเวลาแก้ไขปัญหา การตั้งค่าไฟล์ module-info.java (จิ๊กซอว์) เป็นอีกหนึ่ง hairball ที่หลายคนยังไม่ได้ค้นพบ
ค่อนข้างสับสนว่าไฟล์เหล่านี้ (ด้านล่าง) เป็นไฟล์สองไฟล์เท่านั้นที่ฉันต้องการในไฟล์ build.gradle เอกสาร Hibernate ยังไม่ชัดเจนว่าคุณต้องใส่ Jars ใด Entity-manager ทำให้เกิดความสับสนและไม่จำเป็นต้องใช้ในเวอร์ชันไฮเบอร์เนตล่าสุดอีกต่อไปและไม่ใช่ javax.persistence-api หมายเหตุฉันใช้ Java 10 ที่นี่ดังนั้นฉันจึงต้องรวม jaxb-api เพื่อรับข้อผิดพลาด xml-bind รวมถึงเพิ่มรายการสำหรับโมดูลการคงอยู่ของจาวาในไฟล์ module-info.java ของฉัน
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;
ด้วย hibernate 5.3.1 คุณไม่จำเป็นต้องระบุผู้ให้บริการด้านล่างในไฟล์ persistence.xml ของคุณ หากไม่ได้ระบุผู้ให้บริการไฮเบอร์เนตจะถูกเลือกตามค่าเริ่มต้น
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
ไฟล์ persistence.xml ควรอยู่ในไดเรกทอรีที่ถูกต้องดังนั้น:
src/main/resources/META-INF/persistence.xml
การก้าวผ่านซอร์สโค้ดจำศีลในดีบักเกอร์ Intellij ซึ่งตรวจสอบภาษาได้เช่นเดียวกันนอกจากนี้ยังโยนข้อยกเว้นที่แน่นอนเนื่องจากคุณสมบัติการแปลภาษาที่ขาดหายไปในไฟล์ persistence.xml ฉันเพิ่มสิ่งนี้ (เพิ่มที่ถูกต้องสำหรับประเภทฐานข้อมูลของคุณ):
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
ฉันยังคงได้รับข้อยกเว้นเหมือนเดิมหลังจากนี้ดังนั้นการก้าวผ่านตัวดีบักอีกครั้งใน Intellij พบว่าเอนทิตีทดสอบที่ฉันพยายามคงอยู่ (ตัวอย่างพ่อแม่ลูกง่าย) ไม่มีคำอธิบายประกอบสำหรับความสัมพันธ์ OneToMany, ManyToOne ฉันแก้ไขสิ่งนี้และข้อยกเว้นหายไปและองค์กรของฉันยังคงโอเคอยู่
นี่คือ persistence.xml สุดท้ายของฉัน:
<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>
ฉันอาจสูญเสียอัญมณีไปประมาณครึ่งวัน คำแนะนำของฉันคือการเริ่มต้นง่ายมาก - การทดสอบรายการเดียวที่มีหนึ่งหรือสองเขตข้อมูลเนื่องจากดูเหมือนว่าข้อยกเว้นนี้อาจมีสาเหตุได้หลายประการ