EntityManager에 대한 지속성 제공자가 없습니다.
내을 persistence.xml
사용하여 동일한 이름을 가진 TopLink
세 이하 META-INF
디렉토리. 그런 다음 코드를 호출하여 다음을 수행합니다.
EntityManagerFactory emfdb = Persistence.createEntityManagerFactory("agisdb");
그러나 다음과 같은 오류 메시지가 나타납니다.
2009-07-21 09 : 22 : 41,018 [main] 오류-agisdb라는 EntityManager에 대한 지속성 공급자가 없습니다. javax.persistence.PersistenceException : agisdb라는 EntityManager에 대한 지속성 제공자가 없습니다. javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:89)에서 javax.persistence.Persistence.createEntityManagerFactory (Persistence.java:60)에서
여기에 persistence.xml
:
<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0">
<persistence-unit name="agisdb">
<class>com.agis.livedb.domain.AddressEntity</class>
<class>com.agis.livedb.domain.TrafficCameraEntity</class>
<class>com.agis.livedb.domain.TrafficPhotoEntity</class>
<class>com.agis.livedb.domain.TrafficReportEntity</class>
<properties>
<property name="toplink.jdbc.url" value="jdbc:mysql://localhost:3306/agisdb"/>
<property name="toplink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="toplink.jdbc.user" value="root"/>
<property name="toplink.jdbc.password" value="password"/>
</properties>
</persistence-unit>
</persistence>
클래스 경로에 있어야합니다. 그러나 위의 오류가 발생했습니다.
후 <persistence-unit name="agisdb">
, 퍼시스턴스 프로 바이더의 이름을 정의 :
<provider>org.hibernate.ejb.HibernatePersistence</provider>
"hibernate-entitymanager.jar"
응용 프로그램의 클래스 경로에 넣습니다 .
최신 버전 "hibernate-core.jar"
의 경우 더 이상 사용되지 않는 대신 사용해야 합니다.hibernate-entitymanager
Eclipse 와 같은 일부 IDE를 실행하는 경우 :Project Properties -> Java Build Path -> Libraries.
그렇지 않으면 /lib
응용 프로그램 에 넣으십시오 .
persistence.xml
파일이 디렉토리에 있는지 확인하십시오 .<webroot>/WEB-INF/classes/META-INF
내 pom.xml 파일에서 이것이 필요했습니다.
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.2.6.Final</version>
</dependency>
같은 문제에 직면하여 오랫동안 해결책을 찾지 못했습니다. 내 경우에는 교체하는 데 도움이되었습니다.
<provider>org.hibernate.ejb.HibernatePersistence</provider>
와
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
어쩌면 <provider>org.hibernate.ejb.HibernatePersistence</provider>
항아리에서 다른 공급자를 참조하면서 하나의 공급자를 정의 했을 수도 있습니다 . 저와 함께 일어났습니다 : persistence.xml 공급자는 openjpa 였지만 클래스 경로에서 eclipselink를 사용하고있었습니다. 이 도움을 바랍니다!
또 다른 요점이 있습니다. Eclipse RCP 환경에서이 문제가 발생하면 팩토리 생성을 Persistence.createEntityManagerFactory
에서new PersistenceProvider().createEntityManagerFactory
이에 대한 자세한 내용 은 ECF 를 참조하십시오 .
빠른 조언 :
- persistence.xml이 클래스 경로에 있는지 확인하십시오.
- 최대 절전 모드 공급자가 클래스 경로에 있는지 확인하십시오.
독립형 애플리케이션 (JavaEE 외부)에서 JPA를 사용하려면 지속성 제공자를 어딘가에 지정해야합니다. 이것은 내가 아는 두 가지 방법으로 수행 할 수 있습니다.
- 지속성 단위에 제공자 요소를 추가하십시오.
<provider>org.hibernate.ejb.HibernatePersistence</provider>
(Chris의 정답에 설명 된대로 https://stackoverflow.com/a/1285436/784594 ) - 인터페이스 javax.persistence.spi.PersistenceProvider의 프로 바이더는 서비스로서 지정해주세요. http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html (이것은 보통 최대 절전 모드 또는 다른 JPA 구현을 클래스 경로에 포함시킬 때 포함
필자의 경우, maven misconfiguration으로 인해 hibernate-entitymanager jar가 다른 모듈의 일시적인 종속성이더라도 종속성으로 포함되지 않았다는 것을 알았습니다.
Eclipse를 사용하는 경우 제외 패턴이 persistence.xml
빌드 경로의 소스 폴더에서 제거되지 않는지 확인하십시오 .
- 로 이동 속성 -> 자바 빌드 경로 -> 소스 탭
MyProject/src/main/java -> Excluded: <your_pattern>
트리 노드 에있는 제외 패턴을 확인하십시오.- 선택적으로
Excluded: (None)
노드를 선택 하고 왼쪽에서 편집 ... 버튼을 클릭하여 설정 하십시오 .
코너 케이스 : m2Eclipse를 사용하는 경우 자동으로 리소스 폴더에 제외를 넣습니다. 그런 다음 일식 내에서 테스트를 실행하려고하면 persistence.xml이 없으면이 오류가 발생합니다.
나는 몇 년 동안 파티에 늦었지만 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>
아마이 보석에 반나절을 낭비했을 것입니다. 내 조언은 매우 간단하게 시작하는 것입니다.이 예외는 많은 원인이있을 수있는 것처럼 하나 또는 두 개의 필드가있는 단일 테스트 엔터티입니다.
'src'폴더 아래에 persistence.xml 파일을 작성했는지 확인하십시오. 프로젝트 폴더 아래에 생성했으며 이것이 내 문제였습니다.
Maven을 사용하는 경우 META-INF 폴더의 올바른 위치를 찾지 못했을 수 있습니다. 다른 사람들은 폴더 복사에 대해 언급했지만 나를 위해 일한 또 다른 방법은 <resources>
태그를 사용하여 Maven에게 폴더를 찾을 위치를 알려주는 것입니다 . 참조 : http://maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html
엔티티 관리자가 많은 지속성 단위를 가리 키려고 할 때 발생합니다. 다음 단계를 수행하십시오.
- 편집기에서 관련 파일을 엽니 다 (IDE에서 프로젝트가 닫힌 경우)
- 지속성 및 엔티티 관리자 관련 코드를 모두 삭제하십시오.
- 파일을 저장
- IDE에서 프로젝트를 엽니 다
- 이제 선택한 DB 또는 테이블을 바인딩하십시오.
나는 같은 문제에 직면했지만 EclipseLink 버전 2.5.0에서 .
필자는 반드시 또 다른 jar 파일을 추가하여 문제를 해결했습니다 ( javax.persistence_2.1.0.v201304241213.jar.jar );
항아리 필요 :
- javax.persistence_2.1.0.v201304241213.jar
- eclipselink.jar
-하여 jdbc.jar (사용하는 데이터베이스에 따라 다름).
이게 도움이 되길 바란다.
또한이 오류가 있었지만 문제는에서 네임 스페이스 uri였습니다 persistence.xml
.
버전 2.1에서 2.0으로 교체 http://xmlns.jcp.org/xml/ns/persistence
했습니다 http://java.sun.com/xml/ns/persistence
.
지금 작동하고 있습니다.
클래스 경로에 hibernate-entitymanager-x.jar를 추가해야합니다.
Hibernate 4.x에서 jar 파일이 존재하면 persistence.xml 파일에 org.hibernate.ejb.HibernatePersistence를 추가 할 필요가 없습니다.
이 질문에 대한 답변은 이미 있지만, 나를 방해하는 팁을 게시하고 싶었습니다. 이 예외는 이전 오류 후에 발생했습니다. 나는 이것을 얻고 있었다 :
property toplink.platform.class.name is deprecated, property toplink.target-database should be used instead.
새로운 속성 이름을 포함하도록 persistence.xml을 변경했지만
<property name="toplink.target-database" value="oracle.toplink.platform.database.oracle.Oracle10Platform"/>
더 이상 사용되지 않는 속성 이름에 대한 메시지에 따라 위와 같은 PersistenceException과 다른 모든 예외 문자열이 나타납니다. 내 팁 : 예외 소시지의 시작을 확인하십시오.
Glassfish v2.1.1에는 재배포 또는 배포 취소 및 배포시 어딘가에 캐시되는 persistence.xml이 업데이트되지 않는 버그가있는 것 같습니다. 서버를 다시 시작한 다음 작동했습니다.
OSGi 컨텍스트에서 번들의 MANIFEST.MF에 지속성 단위를 나열해야합니다. 예 :
JPA-PersistenceUnits: my-persistence-unit
그렇지 않으면 JPA 번들은 번들에 지속성 단위가 포함되어 있음을 알 수 없습니다.
http://wiki.eclipse.org/EclipseLink/Examples/OSGi/Developing_with_EclipseLink_OSGi_in_PDE를 참조 하십시오 .
클래스 경로에 다음 jar 파일이 필요합니다.
- antlr-2.7.6.jar
- commons-collections-3.1.jar
- dom4j-1.6.1.jar
- 최대 절전 모드-주석 -4.0.1.Final.jar
- 최대 절전 모드 코어 -4.0.1.Final.jar
- hibernate-entitymanager.jar
- hibernate-jpa-2.0-api-1.0.0.Final.jar
- javassist-3.9.0.jar
- jboss-logging-3.1.1.GA.jar
- jta-1.1.jar
- slf4j-api-1.5.8.jar
- xxx-jdbc-driver.jar
방금 META-INF를 src에 복사하고 작동했습니다!
Hibernate 5.2.5
Jar 파일 클래스 경로에 필요하다. 이것은 Hibernate 5.2.5 Final 릴리스의 필수 폴더 안에 있습니다. http://hibernate.org/orm/downloads/ 에서 다운로드 할 수 있습니다 .
- antlr-2.7.7
- cdi-api-1.1
- 동급생 -1.3.0
- dom4j-1.6.1
- el-api-2.2
- geronimo-jta_1.1_spec-1.1.1
- 최대 절전 모드-주석-5.0.1. 최종
- 최대 절전 모드 -5.2.5. 최종
- 최대 절전 모드 -jpa-2.1-api-1.0.0. 최종
- jandex-2.0.3. 최종
- javassist-3.20.0-GA
- javax.inject-1
- jboss-interceptor-api_1.1_spec-1.0.0. 베타 1
- jboss-logging-3.3.0. 최종
- jsr250-api-1.0
xml 파일 만들기 "의 persistence.xml" 의를
YourProject / src / META-INF / persistence.xml
persistence.xml
<?xml version="1.0" encoding="UTF-8"?>
<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="sample">
<class>org.pramod.data.object.UserDetail</class>
<exclude-unlisted-classes>true</exclude-unlisted-classes>
<properties>
<property name="hibernate.connection.driver_class" value="com.mysql.jdbc.Driver"/>
<property name="hibernate.dialect" value="org.hibernate.dialect.MySQLDialect"/>
<property name="hibernate.connection.url" value="jdbc:mysql://localhost:3306/hibernate_project"/>
<property name="hibernate.connection.username" value="root"/>
<property name="hibernate.connection.password" value="root"/>
<property name="hibernate.hbm2ddl.auto" value="create-drop"/>
<property name="hibernate.show_sql" value="true"/>
<property name="hibernate.format_sql" value="false"/>
<property name="hibernate.cache.use_second_level_cache" value="false"/>
<property name="hibernate.archive.autodetection" value="true"/>
</properties>
</persistence-unit>
- <persistence> 태그에 언급 된 정보와 버전은 2.1이어야합니다.
- please note the name < persistance-unit > tag, name is mentioned as "sample". This name needs to be used exactly same while loading your
EntityManagerFactor = Persistance.createEntityManagerFactory("sample");. "sample" can be changed as per your naming convention.
Now create a Entity class. with name as per my example UserDetail, in the package org.pramod.data.object
UserDetail.java
package org.pramod.data.object;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.Id;
import javax.persistence.Table;
@Entity
@Table(name = "user_detail")
public class UserDetail {
@Id
@Column(name="user_id")
private int id;
@Column(name="user_name")
private String userName;
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
@Override
public String toString() {
return "UserDetail [id=" + id + ", userName=" + userName + "]";
}
}
Now create a class with main method.
HibernateTest.java
package org.pramod.hibernate;
import javax.persistence.EntityManager;
import javax.persistence.EntityManagerFactory;
import javax.persistence.Persistence;
import org.pramod.data.object.UserDetail;
public class HibernateTest {
private static EntityManagerFactory entityManagerFactory;
public static void main(String[] args) {
UserDetail user = new UserDetail();
user.setId(1);
user.setUserName("Pramod Sharma");
try {
entityManagerFactory = Persistence.createEntityManagerFactory("sample");
EntityManager entityManager = entityManagerFactory.createEntityManager();
entityManager.getTransaction().begin();
entityManager.persist( user );
entityManager.getTransaction().commit();
System.out.println("successfull");
entityManager.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output will be
UserDetail [id=1, userName=Pramod Sharma]
Hibernate: drop table if exists user_details
Hibernate: create table user_details (user_id integer not null, user_name varchar(255), primary key (user_id))
Hibernate: insert into user_details (user_name, user_id) values (?, ?)
successfull
If there are different names in Persistence.createEntityManagerFactory("JPAService")
in different classes than you get the error. By refactoring it is possible to get different names which was in my case. In one class the auto-generated Persistence.createEntityManagerFactory("JPAService")
in private void initComponents()
, ContactsTable class differed from Persistence.createEntityManagerFactory("JPAServiceExtended")
in DBManager class.
Mine got resolved by adding info in persistence.xml e.g. <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
and then making sure you have the library on classpath e.g. in Maven add dependency like
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.5.0</version>
</dependency>
Verify the peristent unit name
<persistence-unit name="com.myapp.model.jpa"
transaction-type="RESOURCE_LOCAL">
public static final String PERSISTENCE_UNIT_NAME = "com.myapp.model.jpa";
Persistence.createEntityManagerFactory(**PERSISTENCE_UNIT_NAME**);
In my case it was about mistake in two properties as below. When I changed them ‘No Persistence provider for EntityManager named’ disappered.
So you could try test connection with your properties to check if everything is correct.
<property name="javax.persistence.jdbc.url" value="...”/>
<property name="javax.persistence.jdbc.password" value="...”/>
Strange error, I was totally confused because of it.
참고URL : https://stackoverflow.com/questions/1158159/no-persistence-provider-for-entitymanager-named
'Programing' 카테고리의 다른 글
postgresql에서 함수, 프로 시저를 표시하고 소스 코드를 트리거하는 방법은 무엇입니까? (0) | 2020.06.18 |
---|---|
문자열을 System.IO.Stream으로 변환 (0) | 2020.06.18 |
jQuery 변경 입력 텍스트 값 (0) | 2020.06.18 |
HttpClient를 사용하는 Java의 Http 기본 인증? (0) | 2020.06.18 |
Visual Studio Code에서 사이드 바를 숨기는 바로 가기가 있습니까? (0) | 2020.06.18 |