2013-10-25 26 views
1

我有一個標準的Spring/JPA /休眠設置。一個帶有@Transactional的服務方法,它使用兩個不同的DAO來注入它們自己的EntityManager實例。Spring和JPA與Hibernate,不同對象的身份

查詢時,什麼是最終同一個實體(直接或間接地檢索)時,它們被表示爲不同的對象,即使對於相同的休眠會話(事務)它們應該是相同的對象。

那麼,使用不同的Hibernate Session我的DAO,還是......?

回答

1

對象的身份甚至可以當Hibernate的Session是相同的不同。如果您使用entityManager.find方法通過標識符讀取,則返回的對象在同一會話(第一級緩存)中始終是相同的。但是使用JPQL或標準查詢可以爲您提供不同的實例(使用相同的數據)。

+0

能爲您提供參考的文件?我只能發現,對於具有hibernate的相同數據庫實體,只要從同一個hibernate會話中檢索到相同的對象身份,就可以保證相同的對象身份。 –

+0

我只能找到這個帖子:http://apmblog.compuware.com/2009/02/16/understanding-caching-in-hibernate-part-one-the-session-cache/ – gadget