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