2011-11-10 71 views
2

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

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

回答

1

我已经调试的情况下有两个实体管理者@PersistenceContext

  • 当注射了同一个单位持续背景下,比较entityManager.getDelegate()它返回供应商的特定标的物相同&都指向同一个实体管理器工厂。

  • 以不同的单位,代表取得&实体经理工厂,两者不同。

更多可以参考this的帖子。

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

+0

非常感谢您的时间和答案!我开始认为没有人对这些东西感兴趣:-)我将收集我从其他来源获得的信息(即Glassfish邮件列表),并将其添加到此处。 –

0

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

总之:您可以比较未包装的JPA供应商EntityManager s,它将为您提供比应用程序服务器EntityManager更充足的信息。
其他的方法是检查交易密钥,看看你是否用不同的方法使用相同的交易。如果是这样,那么这意味着你必须使用相同的PersistenceContext