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.
3 回答
它不会直接回答您的问题,但是如果您想这样做以将应用程序的配置外部化,我认为最好的方法是将所有可配置属性(例如连接设置等)提取到单独的属性文件中并将它们createEntityManagerFactory()
作为 a传递给Map
(另请注意,您可以通过persistence.xml
这种方式覆盖属性)。
然后您persistence.xml
将只包含不可配置的设置(例如持久类列表等),即在不重建整个应用程序的情况下更改这些属性是没有意义的,您可以将其保留在默认位置。
您可以通过使用 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)。
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 目录中。