2014-10-18 54 views
1

從下列來源:hibernate transaction eg.事務對象在異常情況下有什麼價值?

據撰文指出,一個典型的事務應該使用下面的語句:

Session sess = factory.openSession(); 
Transaction tx; 
try { 
    tx = sess.beginTransaction(); 
    //do some work 
    ... 
    tx.commit(); 
} 
catch (Exception e) { 
    if (tx!=null) tx.rollback(); 
    throw e; 
} 
finally { 
    sess.close(); 
} 

我的問題是什麼TX對象有,如果它在catch塊,即任何異常發生,這是tx.commit()的結果?如果是,那麼怎麼樣,因爲它什麼都不返回。 我的意思是問tx的價值在何時何地發生變化?

Quesion 2)是否有必要開始transacion萬一只讀交易即選擇的查詢..

+0

,如果你在你的實體有些慵懶的集合或代理機構,並要使用它們,您需要一個選擇交易(通過調用entity.getMyLazyList例如())。而我沒有得到你的第一個問題 – Multisync 2014-10-18 20:47:46

回答

1
  1. 如果發生異常:

    TX = sess.beginTransaction();

    然後tx將爲空,所以什麼都不會發生。

    如果tx被分配後引發異常,則tx表示數據庫事務掛鉤。您應該始終回滾異常事務,因爲某些數據庫驅動程序可能不會自動執行。

  2. Yes, you should use transactions for read-only queries too

+0

什麼是數據庫事務鉤?請詳細說明?? – sagar 2014-10-19 09:56:55

+0

這是控制tx命令的數據庫驅動程序特定方式:開始/提交/回滾 – 2014-10-19 10:23:04

相關問題