2012-11-03 156 views
0

在下面的代碼:交易在Hibernate

SessionFactory sessionFactory = new Configuration().configure("student.cfg.xml").buildSessionFactory(); 
    Session session = sessionFactory.openSession(); 
    //Transaction tran = session.beginTransaction(); 
    session.save(student); 
    //tran.commit(); 
    session.flush(); 
    session.close(); 

不管我是否註釋/取消註釋的交易,他們工作得很好,即沒有交易還保存操作成功執行。但是當我檢查文檔時,他們總是在插入更新刪除之前使用事務。任何具體原因相同?我錯過了什麼嗎?

請讓我知道這件事。我很困惑:(

問候,

+0

DML命令需要顯式提交..你檢查了插入,刪除,更新命令嗎? – madhairsilence

+0

是的,我知道 – user182944

回答

1

如果你總是用自動提交,這可能會損害你的數據庫。比方說,你想在同一時間提交一堆的工作。在這種情況下,你需要創建交易並在完成所有工作後完成所有工作,例如,您需要爲您的原子工作做許多數據庫訪問,在這種情況下,您需要在交易中完成所有工作,並提交所有工作。

Session session = factory.openSession(); 
Transaction tx = session.beginTransaction(); 

// do some work 
tx.commit(); 

當然你的catch塊。

+0

好,所以我從你的文章中瞭解到:1)如果我不使用事務,則隱式提交會發生,而如果我使用事務,那麼我明確提交數據。 2)隱式提交是有害的,因此事務處理將被用於顯式提交。請讓我知道,如果我讓你正確。如果我錯了,請添加一些內容。 Regards, – user182944

+0

有害可能不是正確的詞,因爲它是關於你的設計。事務是一組數據訪問操作。如果不止是數據庫操作是你的一個單位工作,那麼你需要將它們全部提交到一起,這意味着它們必須處於事務中。 –

+0

我對您的第一個迴應有疑問:假設我讀取了一些數據,開始一個事務,那麼數據在事務內部得到更新的可能性也是正確的?你能解釋一下這條線嗎? – user182944

1

this 這篇文章是從JBOSS

一件事,我相信,如果你不使用事務(在某些時候,你可能需要它,如果沒有必要的原子操作),那麼任何數據庫相關操作命中數據庫。它使系統瘋狂緩慢。如果你進行事務​​處理,那麼hibernate會在同一個事務中執行一次到db的所有操作。在某個地方,我曾經讀過這個地方。

0

我認爲hibernate中的非選擇查詢正在執行多個查詢(或使用多個操作),這就是爲什麼我們需要事務來執行它們。