0

无法测试 jpa/maven 项目。当我从命令行运行“mvn cleant test”时,出现错误“javax.persistence.PersistenceException: No Persistence provider for EntityManager named xxx”。我有一个 Java SE 项目。

我在“src/test/resources/META-INF/persistence.xml”中有持久性配置。我也有同样的'src/main/...'。我可以在“target/classes/META-INF”中看到 persistence.xml。只有那来自主要,而不是来自我运行测试时的测试。这还不是问题,因为两者都应该工作。第一次尝试 JPA,但正如我所见,文件应该没问题(位置和内容)。

持久性单元名称也应该匹配。

我将 Eclipse (EE) 与 m2 和其他必要的插件一起使用,但从命令行运行 maven。我在项目中没有看到任何错误。

// 更新

尝试修复 maven 构建,因为我注意到它应该在“目标/测试类”中有测试类和资源。将命令更改为“mvn clean test-compile test” 现在可以从正确的位置找到资源,但我仍然遇到同样的错误。

// 更新

为清楚起见,这里是完整的 persistence.xml

<persistence version="1.0"
xmlns="http://java.sun.com/xml/ns/persistence">
<persistence-unit name="xxx"
    transaction-type="RESOURCE_LOCAL">
    <provider>my.package.EntityManagerFactoryHelper</provider>
    <exclude-unlisted-classes>false</exclude-unlisted-classes>
    <properties>
        <property name="javax.persistence.jdbc.url" value="jdbc:mysql://localhost:3306/db" />
        <property name="javax.persistence.jdbc.driver" value="com.mysql.jdbc.Driver" />
        <property name="javax.persistence.jdbc.user" value="yyy" />
        <property name="javax.persistence.jdbc.password" value="zzz" />
        <property name="eclipselink.ddl-generation" value="DROP_AND_CREATE" />
    </properties>
</persistence-unit>

我从其他帖子中获取了帮助示例。基本上它只是使用“xxx”持久单元创建电动势。这是助手类。http://pastebin.com/1GE6uMa1

4

2 回答 2

0

尝试在标签内添加 <provider>org.hibernate.ejb.HibernatePersistence</provider>

于 2012-05-22T07:17:18.577 回答
0

提供者必须是:

     <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

否则表创建失败,即使从实体创建表时没有错误。

花了大约 2 天的时间解决了这个问题,因为我认为给定的提示指向了正确的方向并且当时没有检查提供者。

提供者必须根据 eclipselink,因为您可以在“persistence.xml”的配置中发现它。

但我没有明确地说出来。不知道它会那么重要,它甚至成功地创建了一次表。当时不太确定我为提供者提供了什么,但随后失败了(在对表格进行更改之后)。提供商可能应该有其他配置。

于 2012-05-28T07:56:36.747 回答