使用替代“持久性.xml”的 JPA

2022-09-02 03:05:25

我知道通过指示:

Persistence.createEntityManagerFactory("persistence-unit-name");

JPA 持久性机制读取“持久性.xml”文件,查找名为“持久性单元名称”的持久性单元,并基于它构造 EntityManagerFactory。

我的问题是,如何强制JPA获取与“持久性.xml”不同的文件?例如,“持久性测试.xml”。


答案 1

没有标准化的 JPA 方法来执行此操作,尽管各个 JPA 提供程序可能会提供一种方法。我建议使用标准方法,为 main 和 test 使用不同的类路径。

例如,如果您使用 Maven,并且您有两个文件,一个在 中,一个在 中,测试将选取 中一个,因为 Maven 将测试类/资源放在类路径中主类/资源之前。您可以轻松地将 Ant 配置为以类似的方式工作。META-INF/persistence.xmlsrc/main/resourcessrc/test/resourcessrc/test/resources

如果您需要更高级的逻辑,请考虑使用Spring的JPA支持。它将允许您处理高级情况,例如集成多个持久性.xml文件


答案 2

在 EclipseLink 中,您可以执行以下操作:

Properties pros = new Properties();

pros.setProperty(PersistenceUnitProperties.ECLIPSELINK_PERSISTENCE_XML, 
                 "META-INF/persistence-alternative.xml");


EntityManagerFactory factory = 
    Persistence.createEntityManagerFactory("pu-name", pros);

推荐