一尘不染

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

hibernate

在来这里提出这个问题之前,我一直在寻找答案。我的问题很简单:使用JPA实体管理器API时,我无法运行任何JUnit测试。看来我的测试未读取persistence.xml文件。

当我调用时new Configuration().configure().buildSessionFactory(),它就像一个超级按钮一样工作,但是在调用Persistence.createEntityManagerFactory("myapp")is
时抛出一个异常:

javax.persistence.PersistenceException:在com.myapp.Test01上javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:47)处的javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:69)处没有名为myapp的EntityManager的持久性提供程序。
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>

您知道如何解决此问题吗?

非常感谢您的帮助。


阅读 326

收藏
2020-06-20

共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构建输出目录中查找以查看persistence.xml是否在期望的位置。有时我会遇到Eclipse由于某种原因而不复制资源的情况。

2020-06-20