【问题标题】:javax.persistence.PersistenceException: No Persistence provider for EntityManager named samplejavax.persistence.PersistenceException:EntityManager 命名示例没有持久性提供程序
【发布时间】:2011-02-22 06:36:25
【问题描述】:

我正在使用 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");

【问题讨论】:

  • 你是如何运行你的代码的?可能是 META-INF 的路径不在您的类路径中
  • 我将它作为一个简单的 main() 程序运行。 META-INF/persistence.xml 在 src/main/resources 中。正在编译到 D:/arun/mavenprojects/hibernateHawa/target/classes/META-INF/persistence.xml。当我打印 CLASSPATH 时,我看到 D:/arun/mavenprojects/hibernateHawa/target/ 作为第一个条目。很明显,META-INF/persistence.xml 在 CLASSPATH 中。我不知道 Ejb3Configurer 从哪里进入日志并说它可以找到它。但我的代码行 Persistence.createEntity Manager("sample")...抛出异常。

标签: hibernate jpa maven entitymanager


【解决方案1】:

我也遇到了同样的问题,但我得到了一个解决方案:缺少 META-INF/services/javax.persistence.spi.PersistenceProvider 文件。对于 hibernate,它位于 hibernate-entitymanager-XXX.jar 中,因此,如果 hibernate-entitymanager-XXX.jar 不在您的类路径中,您也会收到此错误。

【讨论】:

    【解决方案2】:

    我在 java coderanch 上找到了我的问题的答案。

    persistence.xml 中我的持久性提供者的名称中有错字:

    我将org.hibernate.ejb.HibernatePeristence重命名为

    org.hibernate.ejb.HibernatePersistence
                                  ^---
    

    它开始工作了。

    我发布我的答案是为了对其他人有所帮助。

    【讨论】:

    • 那么请接受这个作为答案,这样其他人就会知道这是答案。谢谢
    【解决方案3】:

    因为错误消息显示“未找到持久性提供程序”,所以闻起来像休眠 jar 文件不在类路径中

    【讨论】:

    • 是的,这是可能的。我有同样的问题。解决了。​​
    猜你喜欢
    • 1970-01-01
    • 2010-11-12
    • 1970-01-01
    • 2011-03-14
    • 2018-04-03
    • 1970-01-01
    相关资源
    最近更新 更多