1

I'm using EclipseLink as my JPA implementation. Our project has a directory where we keep all of our config files, and I would like to store my persistence.xml file in the config directory, but cannot find any way to tell createEntityManagerFactory to look there to find the persistence-unit.

4

3 回答 3

3

它不会直接回答您的问题,但是如果您想这样做以将应用程序的配置外部化,我认为最好的方法是将所有可配置属性(例如连接设置等)提取到单独的属性文件中并将它们createEntityManagerFactory()作为 a传递给Map(另请注意,您可以通过persistence.xml这种方式覆盖属性)。

然后您persistence.xml将只包含不可配置的设置(例如持久类列表等),即在不重建整个应用程序的情况下更改这些属性是没有意义的,您可以将其保留在默认位置。

于 2012-09-20T18:42:23.943 回答
2

您可以通过使用 spring-orm LocalContainerEntityManagerFactory 来实现这一点(如果您不想使用,则不需要使用所有 spring 上下文内容)。

LocalContainerEntityManagerFactory lcemf = new LocalContainerEntityManagerFactory ();
lcemf.setPersistenceUnitName("some_pu");
lcemf.setpersistenceXmlLocation("file:/data/config.xml");
EntityManagerFactory emf = lcemf.createNativeEntityManagerFactory();

您也可以一劳永逸地忽略 xml,并使用 LocalContainerEntityManagerFactory 在代码中配置所有内容(请参阅 setPackagesToScan)。

于 2012-09-20T18:02:39.123 回答
1

persistence.xml必须始终存在于META-INF类路径的目录中。有关不同类型的 java 应用程序的 META-INF 应该在哪里出现的更多信息,请参见此处

持久性单元由 persistence.xml 配置文件定义。META-INF 目录包含persistence.xml 的JAR 文件或目录称为持久单元的根。持久化单元的范围由持久化单元的根决定。

每个持久性单元必须用一个对持久性单元的范围唯一的名称来标识。

持久单元可以打包为 WAR 或 EJB JAR 文件的一部分,也可以打包为 JAR 文件,然后可以将其包含在 WAR 或 EAR 文件中。

如果将持久单元打包为 EJB JAR 文件中的一组类,persistence.xml 应该放在 EJB JAR 的 META-INF 目录中。

如果将持久性单元打包为 WAR 文件中的一组类,persistence.xml 应该位于 WAR 文件的 WEB-INF/classes/META-INF 目录中。

于 2012-09-20T17:35:26.150 回答