2012-10-04 55 views
0

我正在使用休眠和彈簧爲我的Web應用程序。忘了提交休眠狀態

在此,在一些地方我忘了提交事務...像下面的代碼

SessionFactory sf = HibernateUtils.getSessionFactory(); 
       session = sf.openSession(); 
       tx = session.beginTransaction(); 
..........................................Some Code............................. 

But forgot to commit transaction..... 

finally 
{ 
session.flush(); 
session.close(); 
} 

現在我的問題是: -

  • 這是對我造成任何問題?
  • 有關內存泄漏的問題?
  • 增加對數據庫的負載??

這對我的系統有什麼影響?

回答

2

如果不提交事務,然後

  • 參與交易的表格將被鎖定,直到連接被丟棄/關閉。
  • 作爲事務的一部分對錶進行的更改僅適用於從池中重用相同連接而不重用其他連接的人。
  • 如果commit()方法從未在這樣的連接上被調用,直到它被關閉/丟棄,那麼關閉/斷開連接後所做的所有更改都將丟失。

基本上,你的系統的行爲將是任意的,這意味着它對你來說是一個問題。它不會導致任何內存泄漏。

+0

@Vidor謝謝reply.when我檢查我的過程在機器中,然後它顯示了很多過程在理想的交易...這是背後的原因? – Hunter

+0

不,空閒連接是池中那些沒有被任何數據庫相關代碼主動使用的連接。這不是由於沒有提交交易。一旦你在一個連接上調用'close()'而不管其中有任何事務,連接將被返回到空閒池。 – Vikdor

+0

@Vidor您在您的答案中描述的第三點在我的案例中從未發生意味着我從未丟失過任何數據或更改...... – Hunter