이름이 지정된 EntityManager의 지속성 제공자가 없습니다.
는 내 것을 가지고 있다.persistence.xml
TopLink
META-INF
디렉토리로 이동합니다.요: ㅇㅇㅇ, ㅇㅇㅇ, ㅇㅇㅇ, ㅇㅇㅇ, ㅇㅇㅇ, ㅇㅇㅇ,ㅇㅇ, ㅇㅇ로.
EntityManagerFactory emfdb = Persistence.createEntityManagerFactory("agisdb");
그러나 다음과 같은 오류 메시지가 나타납니다.
2009-07-21 09:22:41,018 [main] ERROR - agisdb라는 이름의 EntityManager용 지속성 공급자가 없음javax.contractence를 클릭합니다.지속성 예외:agisdb라는 이름의 EntityManager에 대한 지속성 공급자가 없습니다.javax.contractence에 있습니다.Persistence.createEntityManagerFactory(Persistence.java:89)javax.contractence에 있습니다.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>
학급 통로에 있었어야 했어하지만 위의 오류가 발생했습니다.
"hibernate-entitymanager.jar"
응용 프로그램의 클래스 경로에 있습니다.
버전의 는, 「」를 사용해 ."hibernate-core.jar"
되지 않는 ""가 ""hibernate-entitymanager
Eclipse와 같은 IDE를 실행하는 경우:Project Properties -> Java Build Path -> Libraries.
이외의 경우는, 「」에 넣습니다./lib
를 참조해 주세요.
★★★ <persistence-unit name="agisdb">
「」를합니다.
<provider>org.hibernate.ejb.HibernatePersistence</provider>
하세요.persistence.xml
「Directory:」에 .<webroot>/WEB-INF/classes/META-INF
같은 문제에 직면하여 오랫동안 해결책을 찾지 못했습니다.제 경우엔 이 제품이
<provider>org.hibernate.ejb.HibernatePersistence</provider>
와 함께
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
여기서부터 해결
pom.xml 파일에 이 파일이 필요했습니다.
<dependency>
<groupId>org.hibernate</groupId>
<artifactId>hibernate-entitymanager</artifactId>
<version>4.2.6.Final</version>
</dependency>
짚고 넘어가겠습니다. RCP에서 이 하면 Eclipse RCP에서 세대를 해야 할 수 .Persistence.createEntityManagerFactory
로로 합니다.new PersistenceProvider().createEntityManagerFactory
상세한 것에 대하여는, 「ECF」를 참조해 주세요.
를 1개의 프로바이더로 도 있습니다.<provider>org.hibernate.ejb.HibernatePersistence</provider>
패스에서 persistence.xml persistence.xml openjpa j 、 ecclipselink 。도움이 되었으면 좋겠다!
빠른 조언:
- persistence.xml이 클래스 경로에 있는지 확인합니다.
- 클래스 경로에 휴지 상태 공급자가 있는지 확인합니다.
JavaEE 외부에서 독립 실행형 응용 프로그램에서 JPA를 사용하는 경우 지속성 공급자를 지정해야 합니다.이 작업은 다음 두 가지 방법으로 수행할 수 있습니다.
- 유닛에 합니다.
<provider>org.hibernate.ejb.HibernatePersistence</provider>
(정답에 기재된 바와 같이 Chris: https://stackoverflow.com/a/1285436/784594) - 또는 인터페이스 javax.interface.spi의 프로바이더입니다.Persistence Provider는 서비스로 지정해야 합니다.http://docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html 를 참조해 주세요(통상은, 클래스 패스에 휴지 상태 또는 다른 JPA 실장을 포함할 경우에 포함됩니다).
저의 경우 maven 설정 오류로 인해 hibernate-entitymanager jar가 다른 모듈의 일시적인 의존관계일지라도 의존관계로 포함되지 않은 것을 알게 되었습니다.
패턴이 Eclipse를 .persistence.xml
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★
- 속성 -> Java 빌드 경로 -> 소스 탭으로 이동합니다.
- 해 보세요.
MyProject/src/main/java -> Excluded: <your_pattern>
(Tree node) - 에 따라 요음음음음음음음음음음음음 it it it it 로 설정합니다.
Excluded: (None)
노드를 선택하고 편집...을 클릭합니다.버튼을 클릭합니다.
저는 파티에 몇 년 늦었지만 HSQLDB와 데스크톱 JavaFX 프로그램으로 Hibernate 3.5.1을 작동시키려다가 같은 예외를 경험했습니다.이 스레드의 도움으로 많은 시행착오를 겪으며 작동하게 되었습니다.이 에러는, 다양한 문제에 대해서 발생하는 것 같습니다.
No Persistence provider for EntityManager named mick
hibernate 튜토리얼의 예를 작성하려고 했지만 Java 10을 사용하고 있었기 때문에 쉽게 작성 및 실행할 수 없었습니다.저는 그 문제를 고치느라 시간을 낭비하고 싶지 않아서 포기했습니다.module-info.java 파일(Jigsaw)을 셋업하는 것은 많은 사람들이 아직 발견하지 못한 또 다른 어려운 일입니다.
조금 혼란스러운 것은 이 파일들(아래)이 build.gradle 파일에 필요한 유일한 파일이었다는 것입니다.Hibernate 문서에서는 어떤 Jar를 포함해야 하는지에 대해 명확하게 설명하지 않습니다.엔티티 매니저가 혼란을 일으키고 있어 최신 휴지 상태 버전에서는 더 이상 필요하지 않습니다.또한 javax.persistence-api도 필요하지 않습니다.여기서 Java 10을 사용하고 있기 때문에 xml 바인딩 오류를 회피하기 위해 jaxb-api를 포함하고 module-info.java 파일에 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;
휴지 상태 5.3.1에서는 persistence.xml 파일에서 공급자를 지정할 필요가 없습니다.Hibernate 공급자가 제공되지 않으면 기본적으로 Hibernate 공급자가 선택됩니다.
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
persistence.xml 파일은 다음과 같이 올바른 디렉토리에 배치되어야 합니다.
src/main/resources/META-INF/persistence.xml
Intelij 디버거에서 hibernate source code를 밟아 사투리를 확인해도 persistence.xml 파일에 사투리 속성이 없기 때문에 동일한 예외가 발생하였습니다.이 항목을 추가했습니다(고객님의 DB 유형에 맞는 올바른 항목 추가).
<property name="hibernate.dialect" value="org.hibernate.dialect.HSQLDialect"/>
그 후에도 같은 예외가 발생했기 때문에 Intelij에서 디버거를 다시 진행하면 제가 유지하려고 했던 테스트 엔티티(단순한 부모-자녀 예)에 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>
아마 이 보석 때문에 반나절을 허비했을 거야.이 예외에는 여러 가지 원인이 있을 수 있으므로 매우 단순하게 시작하는 것이 좋습니다. 1개 또는 2개의 필드가 있는 단일 테스트 엔티티입니다.
모서리 케이스: m2Eclipse를 사용하는 경우 리소스 폴더에 제외 항목이 자동으로 추가됩니다.그런 다음 이클립스 내에서 테스트를 실행하려고 하면 persistence.xml이 계속 존재하지 않으면 이 오류가 발생합니다.
'src' 폴더 아래에 persistence.xml 파일을 생성했는지 확인합니다.프로젝트 폴더 아래에 작성했는데 그게 제 문제였어요.
Maven을 사용하는 경우 META-INF 폴더에 적합한 위치를 찾지 못할 수 있습니다.했지만, 가 있었던 또 에게 폴더를이었습니다.<resources>
태그 참조: 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)을 추가하여 문제를 해결했습니다.
다음 중 하나:
.interance_2.1.0.v201304241213.jar
.jar
jdbc.jar(사용하는 데이터베이스에 따라 다름)
이게 도움이 됐으면 좋겠어요.
만, 는, 「네임스페이스 」, 「 uri」입니다.persistence.xml
.
교체했습니다.http://xmlns.jcp.org/xml/ns/persistence
로로 합니다.http://java.sun.com/xml/ns/persistence
2.10.1.2.0을 참조해 주세요.
이제 됐다.
클래스 패스에 hibernate-entitymanager-x.jar를 추가해야 합니다.
Hibernate 4.x에서 jar가 있으면 org.hibernate.ejb를 추가할 필요가 없습니다.persistence.xml 파일의 휴지 상태.
그 질문은 이미 답변이 되었지만, 단지 저를 지연시키고 있는 팁을 게시하고 싶었어요.이전 오류가 발생한 후 이 예외가 발생했습니다.난 이걸 듣고 있었어:
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"/>
사용되지 않는 속성 이름에 대한 메시지에 이어 위와 같은 Persistence Exception과 완전히 다른 예외 문자열이 표시되었습니다.팁: 예외 소시지의 앞부분을 꼭 확인하세요.
Glassfish v2.1.1에는 재배포 또는 배포 해제 및 배포가 어딘가에서 캐시되고 있는 persistence.xml을 업데이트하지 않는 버그가 있는 것 같습니다.서버를 다시 시작해야 했고 작동했어요.
OSGi 컨텍스트에서는 번들의 매니페스토에 지속성 단위를 나열해야 합니다.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
- 공유 컬렉션-3.1.jar
- dom4j-1.6.1.jar
- hibernate-displate-contributions-4.0.1.Final.jar
- hibernate-core-4.0.1.Final.jar
- hibernate-manager.jar
- hibernate-jpa-2.0-api-1.0.0 입니다.Final.jar
- javassist-3.9.0.jar
- jboss-3.1.1.GA.jar
- jta-1.1.jar
- slf4j-api-1.5.8.jar
- xxx-jdbc-driver.jar.
방금 META-INF를 src에 복사해서 작업했어!
5.5 상 55.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
- 제로니모jta_11_spec-1.1.1
- hibernate-syslogation-5.0.1.최종
- hibernate-core-5.2.5.최종
- hibernate-jpa-2.1-api-1.0.0 입니다.최종
- jandex-2.0.3.최종
- 자바시스트-3.20.0-GA
- javax.http-1
- jboss-discor-api_1 입니다.1_spec-1.0.0.베타 1
- jboss-3.3.0.최종
- jsr250-api-1.0
에서 xml 파일 "persistence.xml"을 만듭니다.
프로젝트/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>
- < persion >태그에 기재되어 있는 정보와 버전은 2.1이어야 합니다.
- 이름 <persion-unit > 태그에 주의해 주십시오.이름은 "sample"로 기재되어 있습니다.이 이름은 로드하는 동안 정확히 동일하게 사용해야 합니다.
EntityManagerFactor = Persistion.createEntityManagerFactory("샘플");"샘플"은 명명 규칙에 따라 변경할 수 있습니다.
이제 엔티티 클래스를 만듭니다.패키지 org.pramod.data.object에 UserDetail 예시와 같이 이름을 입력합니다.
User Detail.자바
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 + "]";
}
}
이제 main 메서드를 사용하여 클래스를 만듭니다.
휴지 상태 Test.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();
}
}
}
출력은 다음과 같습니다.
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
제 경우 이전에는 아이디어를 사용하여 데이터베이스 스키마에 의해 엔티티를 생성하고persistence.xml
에서 자동으로 생성됩니다.src/main/java/META-INF
https://stackoverflow.com/a/23890419/10701129,에 따르면 다음 주소로 이동합니다.src/main/resources/META-INF
를 루트로서 있습니다.저는 좋아요.
다만, 원래의 META-INF(즉, src/main/java/META-INF)를 소스 루트로 마크하는 것만으로 동작하지 않기 때문에 혼란스럽습니다.
구조는 다음과 같습니다.
다른 Persistence.createEntityManagerFactory("JPAService")
에러와는 다른 클래스입니다.리팩터링을 하면 제 경우와 다른 이름을 얻을 수 있습니다.1개의 클래스에서는 자동 생성된Persistence.createEntityManagerFactory("JPAService")
private void initComponents()
가 , ContactsTable " 와 .Persistence.createEntityManagerFactory("JPAServiceExtended")
DBManager db db db 。
persistence.xml). <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
라이브러리를 를 들어에서 Maven과 같은 합니다.
<dependency>
<groupId>org.eclipse.persistence</groupId>
<artifactId>eclipselink</artifactId>
<version>2.5.0</version>
</dependency>
존재하는 유닛명을 확인합니다.
<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**);
저의 경우 아래와 같이 두 가지 속성에서 실수가 있었습니다.변경 시 'No Persistence Provider for EntityManager named'가 사라졌습니다.
따라서 속성과의 연결을 테스트하여 모든 것이 올바른지 확인할 수 있습니다.
<property name="javax.persistence.jdbc.url" value="...”/>
<property name="javax.persistence.jdbc.password" value="...”/>
이상한 오류네요, 그것 때문에 완전히 혼란스러웠어요.
을 persistence.xml .<project root>\bin\META-INF
로 인해 EclipseLink 2.5.2
간단한 플러그인 프로젝트를 사용합니다.
같은 문제를 안고 있었지만, 이것은 실제로 나에게 효과가 있었습니다.
mvn install -e -Dmaven.repo.local=$WORKSPACE/.repository.
NB : 위의 maven 명령어는 모든 프로젝트 종속성을 처음부터 다시 설치합니다.네트워크 요청 maven이 실행 중이기 때문에 콘솔에 상세 로그가 로드됩니다.
파일의 절대 경로를 사용해야 합니다. 그렇지 않으면 작동하지 않습니다.그런 다음 이 경로를 사용하여 파일을 작성하고 구성에 전달합니다.
@Throws(HibernateException::class)
fun getSessionFactory() : SessionFactory {
return Configuration()
.configure(getFile())
.buildSessionFactory()
}
private fun getFile(canonicalName: String): File {
val absolutePathCurrentModule = System.getProperty("user.dir")
val pathFromProjectRoot = absolutePathCurrentModule.dropLastWhile { it != '/' }
val absolutePathFromProjectRoot = "${pathFromProjectRoot}module-name/src/main/resources/$canonicalName"
println("Absolute Path of secret-hibernate.cfg.xml: $absolutePathFromProjectRoot")
return File(absolutePathFromProjectRoot)
}
GL
언급URL : https://stackoverflow.com/questions/1158159/no-persistence-provider-for-entitymanager-named
'programing' 카테고리의 다른 글
컴포넌트에 믹스인이 전달되었는지 어떻게 확인합니까? (0) | 2022.08.12 |
---|---|
C 또는 C++로 콜스택 인쇄 (0) | 2022.08.12 |
재사용 가능한 컴포넌트를 사용할 때 텍스트 영역의 값을 변경하려면 어떻게 해야 합니까? (0) | 2022.08.12 |
전면에서 사용자 역할을 안전하게 저장할 위치 (0) | 2022.08.12 |
Nuxt.js: 디스패치 Vuex 액션이 mapState와 함께 작동하지 않음 (0) | 2022.08.12 |