【问题标题】:DAO classes can not see persistence.xmlDAO 类看不到 persistence.xml
【发布时间】:2012-05-31 14:14:07
【问题描述】:

我正在使用 eclipse + eclipselink + maven2 + mysql + jpa 2.0 + java SE。

我可以使用 Eclipse 从 Entity 类创建 MySQL 表。 persistence.xml 位于 src/main/resources/META-INF/...

我还在 Eclipse 中指定了用于生产和测试的数据库连接。该项目选择了任何一个,并且似乎都可以工作。

根据项目使用的数据源,将表创建到选定的数据库。作为数据库连接详细信息的 persistence.xml 中的内容被忽略(不确定会发生什么)。此外,如果我右键单击 persistence.xml 并选择“JPA 工具”>“同步类列表”。该文件将使用实体类进行更新。

persistence.xml 也是必需的,否则将不会在任何一个数据库中创建表。 (通过重命名文件测试)

早些时候,我还能够通过放入和加载东西来执行一些 DAO 方法进行测试。 Eclipse 包资源管理器中还有一个名为“JPA”的菜单项,列出了项目中不再存在的 JPA 实体。

我没有对项目进行任何更改(仅在晚上关闭计算机)。下次打开项目时,我不再能够执行任何 DAO 方法,并且出现以下错误:

No Persistence provider for EntityManager named xxx

同样的错误出现在具有 DAO 方法的主类,Eclipse 运行的 JUnit 测试和 Maven 执行的相同测试。

注意:我仍然可以从实体创建表。

有什么建议吗?

【问题讨论】:

    标签: eclipse jpa-2.0 eclipselink


    【解决方案1】:

    通常,这是由于您的资源目录未部署到您的应用程序容器。在 Eclipse 中,右键单击项目并在 Project Explorer 中选择 Properties。然后,选择 Deployment Assembly 属性并确保正在部署您的“/src/main/resources”:

    【讨论】:

    • 我记得有时会使用“部署程序集”属性……但你猜怎么着。现在我什至没有那个选项可用。不过感谢您的提示。这可能是事情不起作用的原因,但现在我必须找出为什么会丢失。我还禁用了 Maven 特性,看看它是否会恢复菜单。没有运气。
    • 如果我创建一个新项目并将其设置为“动态 Web 项目”,我将获得“部署程序集”选项。但是对于我目前的 SE 项目,我没有该选项可用,我不确定是否应该使用它,即使它可用。
    【解决方案2】:

    问题出在 pom.xml 中。

    由于需要 eclipselink,我对休眠有依赖。

    错误:这就是我所拥有的

    <dependency>
      <groupId>org.hibernate</groupId>
      <artifactId>hibernate-entitymanager</artifactId>
      <version>4.1.3.Final</version>
    </dependency>
    

    正确:应该是

    <dependency>
      <groupId>org.eclipse.persistence</groupId>
      <artifactId>eclipselink</artifactId>
      <version>2.0.0</version>
      <scope>compile</scope>
    </dependency>
    

    我通过纯粹测试所有可能的方法得到了解决方案。甚至不确定我是如何尝试替换的,因为我之前能够使用相同的 pom 和项目进行测试。

    没有任何错误或其运作方式表明它可能有些错误。

    甚至不确定这是否完全正确,但至少它可以再次工作。

    【讨论】:

      猜你喜欢
      • 2015-09-10
      • 2013-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-08-21
      • 2011-06-18
      • 1970-01-01
      相关资源
      最近更新 更多