programing

이름이 지정된 EntityManager의 지속성 제공자가 없습니다.

bestcode 2022. 8. 12. 23:25
반응형

이름이 지정된 EntityManager의 지속성 제공자가 없습니다.

는 내 것을 가지고 있다.persistence.xmlTopLinkMETA-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★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★

  1. 속성 -> Java 빌드 경로 -> 소스 탭으로 이동합니다.
  2. 해 보세요.
    MyProject/src/main/java -> Excluded: <your_pattern>
    (Tree node)
  3. 에 따라 요음음음음음음음음음음음음 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

엔티티 매니저가 많은 지속성 단위를 가리키려고 할 때 발생합니다.다음의 순서를 실행합니다.

  1. 에디터에서 관련 파일을 엽니다(IDE에서 프로젝트가 닫혀 있는 경우).
  2. 모든 지속성 및 엔티티 관리자 관련 코드 삭제
  3. 파일을 저장하다
  4. IDE에서 프로젝트 열기
  5. 이제 선택한 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 파일이 필요합니다.

  1. antlr-2.7.6.jar
  2. 공유 컬렉션-3.1.jar
  3. dom4j-1.6.1.jar
  4. hibernate-displate-contributions-4.0.1.Final.jar
  5. hibernate-core-4.0.1.Final.jar
  6. hibernate-manager.jar
  7. hibernate-jpa-2.0-api-1.0.0 입니다.Final.jar
  8. javassist-3.9.0.jar
  9. jboss-3.1.1.GA.jar
  10. jta-1.1.jar
  11. slf4j-api-1.5.8.jar
  12. xxx-jdbc-driver.jar.

방금 META-INF를 src에 복사해서 작업했어!

5.5 상 55.2.5
클래스 경로에 필요한 Jar 파일입니다.이것은 Hibernate 5.2.5 Final 릴리스의 필수 폴더 내에 있습니다.http://hibernate.org/orm/downloads/ 에서 다운로드 할 수 있습니다.

  1. antlr-2.7.7
  2. cdi-api-1.1
  3. 클래스메이트-1.3.0
  4. dom4j-1.6.1
  5. el-api-2.2
  6. 제로니모jta_11_spec-1.1.1
  7. hibernate-syslogation-5.0.1.최종
  8. hibernate-core-5.2.5.최종
  9. hibernate-jpa-2.1-api-1.0.0 입니다.최종
  10. jandex-2.0.3.최종
  11. 자바시스트-3.20.0-GA
  12. javax.http-1
  13. jboss-discor-api_1 입니다.1_spec-1.0.0.베타 1
  14. jboss-3.3.0.최종
  15. 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>

  1. < persion >태그에 기재되어 있는 정보와 버전은 2.1이어야 합니다.
  2. 이름 <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-INFhttps://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

반응형