2012-04-01 100 views
0

如果我使用Hibernate會話保存一個實體,然後探測從下一行的當前會話中獲取此實體(即,沒有將更改寫入數據庫),會話將返回一個東西?我認爲它應該,因爲它也意識到它已經做了什麼改變。試圖瞭解休眠會話

回答

0

是的,已保存的實體和正在加載/查詢的實體的視圖應該一致。在執行查詢之前,有時查詢會導致對數據庫的所有未完成更改進行刷新,以產生此一致性(假定會話設置爲默認自動刷新模式)。

此外,在這種情況下,會話應返回與您保存的完全相同的對象,而不是引用數據庫中同一行的副本。

+0

,但它從AbstractAnnotationAwareTransactionalTests類延伸,並標記爲事務 – preslavrachev 2012-04-01 18:51:04

+0

你是如何「探測」爲實體JUnit測試返回null?使用查詢?會話之前自動刷新會話?在查詢幫助之前是否放置了session.flush()調用? – araqnid 2012-04-01 18:59:22

+0

我只需保存,沖洗,然後再嘗試從下一行的會議上抓住它,而且它返回null,但我看到了INSERT SQL被髮送到數據庫。難道測試被標記爲@Transactional? – preslavrachev 2012-04-01 19:09:54

0

它應該,但是在實現相等和散列碼時你必須小心。會話只是一個由對象ID鍵入的實體的大散列圖。所以如果你試圖通過ID檢索對象,你會得到相同的對象。