나는 몇 년 동안 파티에 늦었지만 HSQLDB 및 데스크탑 JavaFX 프로그램으로 작업하는 Hibernate 3.5.1을 얻는 동안 같은 예외를 겪었다. 이 스레드의 도움과 많은 시행 착오로 작동하도록했습니다. 다양한 문제에 대해이 오류가 발생하는 것 같습니다.
No Persistence provider for EntityManager named mick
최대 절전 모드 자습서 예제를 작성하려고 시도했지만 Java 10을 사용했기 때문에 쉽게 빌드하고 실행할 수 없었습니다. 나는 그 문제를 해결하는 데 시간을 낭비하고 싶지 않아 포기했습니다. module-info.java 파일 (Jigsaw)을 설정하는 것은 많은 사람들이 아직 발견하지 못한 또 다른 헤어볼입니다.
다소 혼란 스럽습니다. 이들 (아래)이 내 build.gradle 파일에 필요한 유일한 두 파일이라는 것입니다. 어떤 병을 포함시켜야하는지에 대해서는 Hibernate 문서가 명확하지 않다. 엔터티 관리자는 혼란을 일으켜 최신 Hibernate 버전에서 더 이상 필요하지 않으며 javax.persistence-api도 아닙니다. 참고로 Java 10을 사용하고 있으므로 jaxb-api를 포함하여 일부 xml-bind 오류를 해결하고 module-info.java 파일에 java persistence 모듈에 대한 항목을 추가해야했습니다.
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;
최대 절전 모드 5.3.1을 사용하면 아래에서 persistence.xml 파일에 공급자를 지정할 필요가 없습니다. 제공되지 않으면 최대 절전 모드 공급자가 기본적으로 선택됩니다.
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
persistence.xml 파일은 올바른 디렉토리에 있어야합니다.
src/main/resources/META-INF/persistence.xml
Dialect를 검사하는 Intellij 디버거에서 최대 절전 모드 소스 코드를 단계별로 실행하면 persistence.xml 파일의 dialect 속성이 없어서 동일한 예외가 발생했습니다. 나는 이것을 추가했다 (귀하의 DB 유형에 맞는 것을 추가하십시오) :
<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>
아마이 보석에 반나절을 낭비했을 것입니다. 내 조언은 매우 간단하게 시작하는 것입니다.이 예외는 많은 원인이있을 수있는 것처럼 하나 또는 두 개의 필드가있는 단일 테스트 엔터티입니다.