hibernate - 在通过 Eclipse的JUnit测试中,如何使用 persistence.xml 和 hibernate.cfg.xml?

  显示原文与译文双语对照的内容
141 0

在这里我一直在寻找一个答案,然后再来问这个问题。我的问题很简单:我不能在使用JPA实体管理器API时运行任何JUnit测试。似乎我的测试没有读取 persistence.xml 文件。

When i callnew Configuration().configure().buildSessionFactory()它的作用就像一个魅力,但是当调用Persistence.createEntityManagerFactory("myapp")是:

javax.persistence.PersistenceException: 在 javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47) 处的javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69) 处没有名为myapp的持久化提供程序,位于 com.myapp. Test01.setUpBeforeClass(Test01.java:22 ) 处

我的JavaSE项目具有以下结构:

myapp
++src/main/java
 ++com.myapp.model
 ++//My entity classes are here
++src/test/java
 ++com.myapp
 ++Test01.java
++src/main/resources
 ++hibernate.cfg.xml
 ++META-INF 
 ++persistence.xml

persistence.xml 看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<persistence xmlns="http://java.sun.com/xml/ns/persistence"
 version="2.0">
 <persistence-unit name="myapp" transaction-type="RESOURCE_LOCAL">
 <provider>org.hibernate.ejb.HibernatePersistence</provider>
 <properties>
 <property name="hibernate.ejb.cfgfile" value="hibernate.cfg.xml"></property> 
 </properties>
 </persistence-unit>
</persistence>

你知道如何解决这个问题?

非常感谢你的帮助。

时间:原作者:0个回答

89 1

我的猜测是org.hibernate.ejb.HibernatePersistence不在类路径上。它不在主 Hibernate jar 中,它位于 Hibernate entitymanager或者一些这样的jar 中。

一些快速实验将是做的,在代码之前,在调用之前Persistence.createEntityManagerFactory():

System.out.println(getClass().getResource("META-INF/persistence.xml"));

还有:

System.out.println(Class.forName("org.hibernate.ejb.HibernatePersistence"));

检查 Eclipse 是否正在复制你的资源是明智的;做一个项目>,然后查看 Eclipse 构建输出目录。有时,由于某些原因或者其他原因,Eclipse 不会复制资源。

原作者:
...