如何通过Eclipse中使用的persistence.xml和hibernate.cfg.xml在J

2019-08-01 11:30发布

在相当长的一段时间,我一直在寻找一个答案来这里之前,询问这个问题。 我的问题很简单:使用JPA实体管理器API时,我不能运行任何JUnit测试。 看来,我的测试是不读persistence.xml文件。

当我打电话new Configuration().configure().buildSessionFactory()它就像一个魅力,但一个例外是调用时抛出Persistence.createEntityManagerFactory("myapp")是:

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

你有什么想法如何解决这个问题呢?

非常感谢您的帮助。

Answer 1:

我的猜测是, org.hibernate.ejb.HibernatePersistence是不是在你的类路径中。 这不是在主Hibernate的罐子,它在休眠-的EntityManager或一些这样的罐子。

一对夫妇的快速实验将会被立即调用之前做的,在代码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不复制资源,出于某种原因或其他情况。



Answer 2:

把配置中src/test/resources/META-INF



文章来源: How to use persistence.xml and hibernate.cfg.xml in JUnit tests via eclipse?