【问题标题】:where does Persistence.createEntityManagerFactory() look for the persistence unit?Persistence.createEntityManagerFactory() 在哪里寻找持久化单元?
【发布时间】:2014-10-14 18:39:58
【问题描述】:

我正在使用日食。我正在尝试调试无法找到确实位于我的 Eclipse 项目目录结构中的持久性单元。

EntityManagerFactory javax.persistence.Persistence.createEntityManagerFactory(String persistenceUnitName, Map properties) 在哪里寻找持久性单元?

当我问它在哪里时,我的意思是所有可能被搜索的资源,包括 eclipse 配置、persistence.xml 中的属性(如果找到该文件)、包含的 JAR 搜索的资源等。要探索它是如何工作的,我通过右键单击位于 Eclipse 项目的根 (src/main/java) 中的 Main.java 类来执行测试程序。

答案可能会帮助我弄清楚如何配置 eclipse 项目,以便EntityManagerFactory javax.persistence.Persistence.createEntityManagerFactory(String persistenceUnitName, Map properties) 可以找到持久性单元。

【问题讨论】:

  • 在链接的questions 之一中,(很可能)所述异常的原因是我在该问题的给定XML 文件中将databasePlatform 错误配置为org.hibernate.dialect.HSQLDialect,尽管我使用的是MySQL 5.x。它应该是 org.hibernate.dialect.MySQLDialect 或版本限制/版本特定 - org.hibernate.dialect.MySQL5Dialect (到目前为止,我不记得到底出了什么问题,因为我现在主要使用 EJB)。

标签: java eclipse hibernate jpa persistence


【解决方案1】:

它会搜索位于 META-INF 目录中的 persistence.xml。此文件夹必须与您的根包处于同一级别。

在 maven 项目中,该文件夹位于 /src/main/resources/META-INF/persistence.xml

【讨论】:

  • 好的,你的 META-INF 文件夹必须在 src/main/resources 中
  • 你是如何执行你的例子的?如果您从 maven 测试包运行,那么也许您必须在 src/test/resources 中声明持久性。但老实说,我不太确定是否需要它。
  • +1 到目前为止为您提供帮助,尽管我正在寻找更深入的答案,以帮助谷歌搜索此内容的人真正了解内部管道内部发生的情况。
  • hyperjaxb 创建一个 persistence.xml 并将其放置在您的目标文件夹中。也许这会干扰放置在资源文件夹中的那个。也许您可以尝试从输出目录中删除持久性,并且再次运行您的示例
  • 我的问题是通过移动由 hyperjaxb 和构建 hyperjaxb 项目的 pom.xml 文件组合创建的东西创建的。我通过在进入 Eclipse 之前对项目构建进行更改来解决我的问题。我将标记您的答案,以感谢您为此付出的时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-01-16
  • 1970-01-01
  • 2019-05-02
  • 2012-05-21
  • 2011-08-01
  • 2015-07-28
  • 2018-06-24
相关资源
最近更新 更多