有没有办法检查两个EntityManagers实例是否代表相同的PersistenceContext?
容器可以使用代理来实现EntityManager,所以我不认为检查注入的EntityManager的引用并比较它(换句话说做“==”比较)就足以说它代表了相同的PersistenceContext,对吧?
答案 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
。