javax.persistence.PersistenceException: Отсутствует поставщик сохраняемости для именованного образца EntityManager - PullRequest
1 голос
/ 22 февраля 2011

Я использую Hibernate Entity Manager.Он жалуется, что не может найти поставщика сохраняемости, но все равно регистрирует его в журналах:

    TRACE 2011-02-21 22:17:52,843 [main](Ejb3Configuration.java:321) org.hibernate.ejb.Ejb3Configuration - PersistenceMetadata(version=2.0) [
        name: sample
        jtaDataSource: null
        nonJtaDataSource: null
        transactionType: RESOURCE_LOCAL
        provider: org.hibernate.ejb.HibernatePeristence
        useQuotedIdentifiers: false
        classes[
        ]
        packages[
        ]
        mappingFiles[
        ]
        jarFiles[
        ]
        hbmfiles: 0
        properties[
            hibernate.connection.username: scott
            hibernate.connection.password: tiger
            hibernate.dialect: org.hibernate.dialect.OracleDialect
            hibernate.show_sql: true
            hibernate.connection.url: jdbc:oracle:thin:@localhost:1521:krsna
            hibernate.archive.autodetection: class, hbm
            hibernate.connection.driver_class: oracle.jdbc.driver.OracleDriver
        ]]
    Exception in thread "main" javax.persistence.PersistenceException: No Persistence provider for EntityManager named sample
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
        at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:32)
        at EMPersistDemo2.main(EMPersistDemo2.java:26)

Очевидно, что он его находит, регистрирует его ... но все равно выдает это исключение.Я что-то упустил?

Я использую Maven, и я поместил файл persistence.xml в src / main / resources / META-INF.Его содержимое:

    <!-- persistence.xml -->
    <persistence ...>
       <persistence-unit name="sample">
        <provider>org.hibernate.ejb.HibernatePeristence</provider>
        <!-- Scan for annotated classes and Hibernate mapping XML files -->
        <properties>
           <property name="hibernate.archive.autodetection" value="class, hbm"/>
           <property name="hibernate.connection.driver_class" value="oracle.jdbc.driver.OracleDriver"/>
           <property name="hibernate.connection.url" value="jdbc:oracle:thin:@localhost:1521:krsna"/>
           <property name="hibernate.connection.username" value="scott"/>
           <property name="hibernate.connection.password" value="tiger"/>
           <property name="hibernate.dialect" value="org.hibernate.dialect.OracleDialect"/>
           <property name="hibernate.show_sql" value="true"/>
        </properties>
        </persistence-unit>

    </persistence>

org.hibernate.Ejb3Configuration может найти его javax.persitence.Persistence не может найти его:

EntityManagerFactory emf = Persistence.createEntityManagerFactory("sample");

Ответы [ 3 ]

3 голосов
/ 04 июля 2013

Я также столкнулся с той же проблемой, но у меня есть решение, которое: отсутствует файл META-INF / services / javax.persistence.spi.PersistenceProvider. для hibernate он находится в hibernate-entitymanager-XXX.jar, поэтому, если hibernate-entitymanager-XXX.jar отсутствует в вашем пути к классам, вы также получите эту ошибку.

2 голосов
/ 27 февраля 2011

Я нашел ответ на свой вопрос о java coderanch.

В моем имени моего поставщика постоянных данных есть опечатка в persistence.xml:

Я переименовал org.hibernate.ejb.HibernatePeristence в

org.hibernate.ejb.HibernatePersistence
                              ^---

и он начал работать.

Я публикую свой ответ, чтобы он помог другим.

0 голосов
/ 22 февраля 2011

пахнет так, как будто файлы спящего jar-файла отсутствуют в пути к классам, поскольку в сообщении об ошибке говорится, что «поставщик сохраняемости не найден»

...