测试两个持久性上下文的相等性

时间:2011-11-10 17:30:41

标签: java jpa-2.0 java-ee-6 equality

有没有办法检查两个EntityManagers实例是否代表相同的PersistenceContext?

容器可以使用代理来实现EntityManager,所以我不认为检查注入的EntityManager的引用并比较它(换句话说做“==”比较)就足以说它代表了相同的PersistenceContext,对吧?

2 个答案:

答案 0 :(得分:1)

我已使用@PersistenceContext

的两个实体管理器调试了该方案
  • 当注入具有相同单位的持久性上下文时,比较返回供应商特定底层对象的entityManager.getDelegate()是相同的&两者都指向同一个实体经理工厂。

  • 有不同的单位,代表们获得了&实体经理工厂,两者都不同。

进一步可以参考this帖子。

注意:使用的环境是Java EE 5,还有其他几种方法,如getMetaModel()unwrap(object)getProperties()等,可以提供更多信息。

答案 1 :(得分:0)

我试图总结一下我从Glassfish邮件列表,Eclipselink论坛和Nayan Wadekar回复中得到的信息并发布它here

简而言之:您可以比较未打包的JPA提供程序EntityManager,它将为您提供比应用程序服务器EntityManager更多的信息。
其他方法是检查Transaction Key以查看您是否在不同方法中使用相同的事务。如果是这样,则表示您必须使用相同的PersistenceContext