如何将persistence.xml与其他配置文件一起存储

时间:2012-09-20 17:29:15

标签: jpa eclipselink persistence.xml persistence-unit

我正在使用EclipseLink作为JPA实施。我们的项目有一个目录,我们保存所有的配置文件,我想将我的persistence.xml文件存储在config目录中,但找不到任何方法告诉createEntityManagerFactory查找持久性 - 单元。

3 个答案:

答案 0 :(得分:3)

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

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

答案 1 :(得分: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在代码中配置all(请参阅setPackagesToScan)。

答案 2 :(得分:1)

persistence.xml必须始终存在于类路径的META-INF目录中。有关不同类型的Java应用程序的META-INF应该在哪里可以找到here

  

持久性单元由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目录中。