没有命名 EntityManager 的持久性提供程序

Posted

技术标签:

【中文标题】没有命名 EntityManager 的持久性提供程序【英文标题】:No Persistence provider for EntityManager named 【发布时间】:2010-11-12 14:10:19 【问题描述】:

我的persistence.xmlMETA-INF 目录下使用TopLink 同名。 然后,我的代码调用它:

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>

它应该在类路径中。然而,我得到了上述错误。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,我从我现在工作的 bean 类中删除了“@ManagedBean”。

【讨论】:

【参考方案2】:

当我将所有 java 类移动到不同的包时遇到了这个问题。 最后,我发现如果我更改了 myclasses 的包,那么我需要使用所有引用我的 java 类的持久性单元/类元素中的新包来更新 persistence.xml。

【讨论】:

以上是关于没有命名 EntityManager 的持久性提供程序的主要内容,如果未能解决你的问题,请参考以下文章

没有名为 X 的 EntityManager 的持久性提供程序

JPA-MSAccess DB 的 EntityManager 没有持久性提供程序

JPA 2.0 使用 Hibernate 作为提供者 - 例外:EntityManager 没有持久性提供者

JPA 和 Play 框架:EntityManager 没有名为更新的持久性提供程序

如何使用休眠将mysql与Java连接?例外:没有名为 org.hibernate.tutorial_jpa 的 EntityManager 的持久性提供程序 [关闭]

创建没有 persistence.xml 配置文件的 JPA EntityManager