2011-06-01 86 views
3

我在Hibernate中有一些簡單的查詢。休眠會話如何工作

  1. 如果我假設有兩個實例在運行,並且每個實例都使用它自己的休眠會話。如果一個會話將數據插入到數據庫中,而第二個會話嘗試檢索新數據,它是否能夠獲取該數據?

  2. 我已經設置了由DB序列生成的主鍵。 所以我創建一個實例並調用save(),但不要提交事務。我仍然能夠獲得該實例的ID。當時是否有數據庫調用發生,或者hibernate如何維護其會話?

回答

2
  1. 是,一旦數據被提交到數據庫;這取決於在交易上配置的isolation level

  2. 是的,它會像select nextval('MY_SEQUENCE');這樣會設置爲實體的id;所以,即使事務還沒有提交,你也有一個id。

This article值得一讀。

+1

第1點的答案還應該提到隔離級別,比如read uncommitted。即使事務尚未提交,但如果隔離級別允許其他人查看中間更改,我認爲這些更改可能是可見的。 – 2011-06-01 07:36:46

+0

好點;我已經添加了一個描述這個的鏈接。然而,默認情況下,隔離級別是Read Committed,這意味着事務A不能讀取事務B尚未提交的值。 – 2011-06-01 07:54:34

+0

非常感謝許多人......這些鏈接真的有用 – Satya 2011-06-13 09:22:50