javax.persistence.PersistenceException:没有名为xxx的EntityManager的持久性提供程序

时间:2012-05-22 06:32:52

标签: maven jpa

无法测试jpa / maven项目。我有错误 “javax.persistence.PersistenceException:没有名为xxx的EntityManager的持久性提供程序” 当我从命令行运行“mvn cleant test”时。我有一个Java SE项目。

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

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

我正在使用带有m2和其他必要插件的Eclipse(EE),但是从命令行运行maven。我发现项目没有错误。

//更新

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

// update

为清楚起见,这是完整的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'持久性单元创建emf。这是辅助类。 http://pastebin.com/1GE6uMa1

2 个答案:

答案 0 :(得分:0)

尝试添加&lt;提供商GT; org.hibernate.ejb.HibernatePersistence&LT; /提供商GT;内部标签

答案 1 :(得分:0)

提供者必须是:

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

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

花了大约两天的时间来解决这个问题,因为我认为通过给定的提示指出了正确的方向,然后没有检查提供者。

提供程序必须符合eclipselink,因为您可以在'persistence.xml'的配置中发现它。

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