没有EntityManager的持久性提供者命名

我有我的persistence.xml具有相同的名称,在META-INF目录下使用toplink。 然后我有我的代码调用它…

EntityManagerFactory emfdb = Persistence.createEntityManagerFactory("agisdb"); 

但是,我收到以下错误消息

 2009-07-21 09:22:41,018 [main]错误 - 没有EntityManager的持久化提供者名为agisdb
 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> 

它应该在类路径…但是,我得到了上述错误…真的很感谢任何帮助…谢谢

<persistence-unit name="agisdb"> ,定义持久性提供者名称:

 <provider>org.hibernate.ejb.HibernatePersistence</provider> 

"hibernate-entitymanager.jar"放在应用程序的类路径中。
对于较新的版本,您应该使用"hibernate-core.jar"而不是弃用的hibernate-entitymanager

如果你正在运行一些IDE,比如EclipseProject Properties -> Java Build Path -> Libraries.

否则把它放在你的应用程序的/lib中。

确保persistence.xml文件位于以下目录: <webroot>/WEB-INF/classes/META-INF

我需要在我的pom.xml文件中:

 <dependency> <groupId>org.hibernate</groupId> <artifactId>hibernate-entitymanager</artifactId> <version>4.2.6.Final</version> </dependency> 

也许你定义了一个像<provider>org.hibernate.ejb.HibernatePersistence</provider>这样的<provider>org.hibernate.ejb.HibernatePersistence</provider>但是在jar中引用另一个<provider>org.hibernate.ejb.HibernatePersistence</provider> 。 这发生在我身上:我的persistence.xml提供程序是openjpa,但我在我的类路径中使用eclipselink。 希望这个帮助!

还有一点:如果您在Eclipse RCP环境中面临这个问题,您可能必须将Factory生成从Persistence.createEntityManagerFactory更改为new PersistenceProvider().createEntityManagerFactory

请参阅ECF关于此的详细讨论。

快速建议:

  • 检查persistence.xml是否在您的类路径中
  • 检查休眠提供程序是否在您的类路径中

在独立应用程序(JavaEE之外)中使用JPA时,需要在某处指定持久性提供程序。 这可以用我知道的两种方式来完成:

  • 或者将提供者元素添加到持久性单元中: <provider>org.hibernate.ejb.HibernatePersistence</provider> (如Chris正确答案中所述: https : //stackoverflow.com/a/1285436/784594 )
  • 或接口javax.persistence.spi.PersistenceProvider的提供者必须指定为服务,请参阅: http : //docs.oracle.com/javase/6/docs/api/java/util/ServiceLoader.html (通常这是包括在将hibernate或其他JPA实现包含到类路径中时

在我的情况下,我发现,由于maven misconfiguration,hibernate-entitymanager jar不包括作为依赖项,即使它是其他模块的瞬态依赖项。

如果您正在使用Eclipse,请确保排除模式不会从构建路径上的源文件夹中删除persistence.xml

  1. 转到属性 – > Java构建路径 – >源选项卡
  2. 检查你的排除模式,位于
    MyProject/src/main/java -> Excluded: <your_pattern>
    树节点
  3. 或者,通过选择节点并单击左侧的编辑…按钮将其设置为Excluded: (None)

角落案例:如果您使用m2Eclipse,它会自动将排除在您的资源文件夹。 然后,当你尝试在eclipse中运行测试时,随后没有执行persistence.xml会产生这个错误。

确保你已经在'src'文件夹下创建了persistence.xml文件。 我在项目文件夹下创建,这是我的问题。

它发生在实体管理器试图指向许多持久性单元时。 执行以下步骤:

  1. 在你的编辑器中打开相关文件(假如你的项目已经在你的IDE中关闭了)
  2. 删除所有与持久性和实体管理器相关的代码
  3. 保存文件
  4. 在IDE中打开项目
  5. 现在绑定你选择的数据库或表

我遇到了同样的问题,但在EclipseLink 2.5.0版本上 。

我通过添加另一个必需的jar文件( javax.persistence_2.1.0.v201304241213.jar.jar )来解决我的问题;

罐子需要:
– javax.persistence_2.1.0.v201304241213.jar
– eclipselink.jar
– jdbc.jar(取决于使用的数据库)。

我希望这有帮助。

我也有这个错误,但问题是persistence.xml的命名空间uri。

我将http://xmlns.jcp.org/xml/ns/persistence替换为http://java.sun.com/xml/ns/persistence ,并将版本2.1更改为2.0。

现在正在工作。

您需要在类路径中添加hibernate-entitymanager-x.jar。

在Hibernate 4.x中,如果存在jar,那么不需要在persistence.xml文件中添加org.hibernate.ejb.HibernatePersistence。

面对同样的问题,很长一段时间找不到解决方案。 在我的情况下,它有助于取代

 <provider>org.hibernate.ejb.HibernatePersistence</provider> 

 <provider>org.hibernate.jpa.HibernatePersistenceProvider</provider> 

从这里解决了

这个问题已经得到了答复,但只是想提出一个小提示,阻止了我。 这个异常在之前的错误之后被抛出。 我得到这个:

 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"/> 

在有关不推荐使用的属性名称的消息之后,我得到了和上面一样的PersistenceException异常,以及其他一些异常。 我的提示:确保检查异常香肠的开始。

Glassfish v2.1.1中似乎存在一个错误,重新部署或未部署,部署不会更新正在缓存某处的persistence.xml。 我不得不重新启动服务器,然后它的工作。

在OSGi上下文中,有必要在你的包的MANIFEST.MF中列出你的持久化单元,例如

 JPA-PersistenceUnits: my-persistence-unit 

否则,JPA bundle将不知道你的bundle包含了持久化单元。

请参阅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. 休眠公地的注解,4.0.1.Final.jar
  5. 休眠核心,4.0.1.Final.jar
  6. 冬眠,entitymanager.jar
  7. 冬眠-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中,然后工作!

如果你使用的是Maven,可能是因为它没有在META-INF文件夹的正确位置上。 其他人提到复制文件夹,但另一种方法是告诉Maven在哪里寻找它,使用<resources>标签。 请参阅: http : //maven.apache.org/plugins/maven-resources-plugin/examples/resource-directory.html

如果Persistence.createEntityManagerFactory("JPAService")在不同的类中有不同的名称, Persistence.createEntityManagerFactory("JPAService")出现错误。 通过重构可以得到不同的名字 ,在我的情况。 在一个类中, private void initComponents() ,ContactsTable类中的自动生成的Persistence.createEntityManagerFactory("JPAService")与DBManager类中的Persistence.createEntityManagerFactory("JPAServiceExtended")不同。

休眠5.2.5
Jar文件在类路径中需要。 这是Hibernate 5.2.5最终版本的必需文件夹。 它可以从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. Geronimo的jta_1.1_spec-1.1.1
  7. hibernate-commons-annotation-5.0.1.Final
  8. hibernate-core-5.2.5.Final
  9. hibernate-jpa-2.1-api-1.0.0.Final
  10. jandex-2.0.3.Final
  11. Javassist进行-3.20.0-GA
  12. javax.inject-1
  13. JBoss的拦截,api_1.1_spec-1.0.0.Beta1
  14. jboss-logging-3.3.0.Final
  15. JSR250-API-1.0

在中创建一个xml文件“persistence.xml”

YourProject / 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. 请记下<persistance>标签中提到的信息,版本应为2.1。
  2. 请注意名称<persistance-unit>标签,名称被称为“样本” 。 加载你的名字时,这个名字需要完全相同

EntityManagerFactor = Persistance.createEntityManagerFactory(“sample”); 。 “样品”可以根据您的命名惯例进行更改。

现在创建一个实体类。 与我的例子UserDetail名称,在包org.pramod.data.object

UserDetail.java

 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方法创建一个类。

HibernateTest.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