我只是想辦法休眠。有點困惑。新手休眠一級緩存混淆
我只是想觀察一級緩存的操作,我理解這種操作是爲了在查詢結束之前對查詢進行批量處理。
但如果我創建了一個對象,休眠立即將其保存,這樣,當我後來在同一事務中更新它,它必須做一個更新過:
Session session = factory.getCurrentSession();
session.beginTransaction();
Test1 test1 = new Test1();
test1.setName("Test 1");
test1.setValue(10);
// Touch it
session.save(test1);
System.out.println("At checkpoint 1");
test1.setValue(20);
session.getTransaction().commit();
我看到SQL進行保存,然後'在檢查點1',然後是更新的SQL。我有沒有設置錯誤或者我誤解了hibernate的第一級緩存?在第一級緩存中是否有很好的文檔 - 我沒有在休眠文檔中找到任何內容,但我很容易就錯過了。
謝謝!
啊 - 太棒了!謝謝 - 解決了它爲什麼立即保存它的問題。我把它從生成中改爲自己並提供了id,現在兩個sql語句都在最後執行。 我仍然有點困惑,爲什麼有兩個sql語句,如果我提供的ID。我會認爲hibernate可以使用對象中的CURRENT值運行插入,而不是原始值。那麼就不需要做插入和更新。但也許這是要問很多?是否有關於在這些情況下hibernate做什麼和不做的文檔,或者我應該只看代碼? – Jeremy 2010-05-27 14:42:35
也許他們擔心你的數據庫包含一個觸發器,它在插入時執行某些操作並在更新時執行其他操作。在那種情況下,緩存更新會改變行爲? – Cobusve 2010-05-27 15:04:31
謝謝Cobusve--很可能。雖然我也看到,通過對同一對象進行多次更新(記住在每次更新之間調用SaveOrUpdate),只有對象的最終狀態更新到數據庫 - 這意味着任何中間觸發器 - 例如更新歷史記錄表所做的更新 - 不會被解僱,所以也許他們並不擔心觸發器;-) – Jeremy 2010-05-27 15:50:30