2011-11-10 78 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