2014-07-10 185 views
0

我創建了一個hibernate會話併爲該會話啓動了一個事務。org.hibernate.exception.LockAcquisitionException:無法提取ResultSet

之後,在該會話中對存儲過程進行多次調用。在電話中的一個我有這個錯誤

org.hibernate.exception.LockAcquisitionException:無法提取的ResultSet

所有過程調用之後,事務被提交。

在這種情況下會發生什麼?

我觀察到的是,只有一些條目(與存儲過程調用相關)反映在MySQL數據庫中,而其他條目則不是。

理想的行爲不應該是所有的條目反映在數據庫中,除了失敗的調用存儲過程嗎?

回答

0

我想我無法理解你的意思。不過,我想陳述一些要點,以防他們可以幫助你。

  1. 理想情況是每個數據庫通信都是在一個事務中進行的。
  2. 休眠中的會話不是線程安全的對象,在與數據庫進行每次通信後都會被忽略。除非需要,否則會話將不會獲得JDBC連接或數據源。使用前不會消耗任何資源。
  3. 如果萬一在事務內部發生任何錯誤/異常,那麼整個事務將在理想情況下回滾。

如果你嵌套事務

What happens depends on whether this is a nested transaction: 

If it is not, then eventually the transaction times out and rolls back. 
If it is, the parent transaction will see that a child transaction has not committed when it commits itself. This will result in a rollback of the entire transaction. 
相關問題