簡體   English   中英

我什么時候會看到休眠實體的更新?

[英]When do I see updates on hibernate entities?

假設我正在使用 spring 和 hibernate,並且在我的一種事務服務方法中執行以下操作。 印刷品的預期結果是什么,更重要的是為什么?

// user1 perviously has some other name then x
User userInstance = userDAO.findById(1);
userInstance.setName("x");
System.out.println(userDAO.findById(1).getName());

userDAO.save(userInstance);
System.out.println(userDAO.findById(1).getName());

我是否總是希望看到我對查詢的用戶實體所做的更改?為什么? 這究竟是如何與休眠代理和一級緩存交互的?

感謝您的任何見解!

在同一個會話中,Hibernate 將使用一級緩存來確保相同的實體(由相同的主鍵標識)始終由相同的對象實例表示。 這意味着在關閉會話之前,無論是與引用的實體userInstance還是通過 Hibernate 使用userDAO.findById(1)進行userDAO.findById(1)您都將始終引用完全相同的對象實例。

所以要回答你的問題,打印的結果是:xx

我假設第 2 行應該使用userInstance而不是userInstance1 我想當第 3 行(下面)執行時,你會看到一個更新刷新到數據庫中:

System.out.println(userDAO.findById(1).getName());

原因是您在內存中有一個未保存但已更新的版本,因此它被認為是“臟的”。 當您重新讀取同一個對象(基於 ID)時,hibernate 將首先將更新的對象刷新到數據庫,然后再重新讀取它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM