如何定义两个持久性单元(一个用于生产,一个用于unit testing)?

这是我的无状态bean:

@Stateless public class Finder { @PersistenceContext(unitName = "production") EntityManager em; [...] } 

它明确定义了持久性单元的名称是production 。 这个单元在persistence.xml配置,一切都很好。 当我对这个类进行unit testing时,我必须使用另一个持久性单元,具有不同的属性和配置设置。 我该如何组织它? 在persistence.xml创建另一个元素? 这有什么最佳实践吗?

我使用相同的持久性单元名称但不同的persistence.xml文件(如果需要编辑代码以启用“测试模式”,您将如何自动化测试?)。

如果您仍在使用Maven,Maven支持本机配置文件的测试版本:

  • “production” persistence.xml位于src/main/resources/META-INF
  • “test” persistence.xml位于src/test/resources/META-INF ,用于测试。

我只是在创建了另一个元素。

您可以在配置中创建第二个持久性单元,但这并不一定意味着您应该这样做 。 多个PU当然是完全正确的,但是当它们专门用于不同的环境时,例如生产与测试,我就避免将它们混合起来。

在您的实例中,我有两个持久性配置文件,并选择Ant / Maven / build工具在适当时复制/重命名正确的。

我有类似的问题,我想提供另一种方法。 我想运行测试prod,但我不使用两个persistence.xml或代码修改。 我只有一个持久性单元,但不同的运行时环境(standalone.xml,Wildfly)。 假设我想要运行我的开发数据库,​​我使用测试运行时环境启动Wildfly。 当我想将它模拟为真实用户时,我会针对prod环境运行。 唯一的区别是standalone.xml中的数据源条目。 描述符总是相同的(例如myappDS,因此persistence.xml中的持久性单元声明也总是相同),但是在测试服务器中,数据源条目指向我的测试数据库,prod数据源条目指向我的prod数据库。