我知道事務有助於回滾更新操作,如果出現任何問題(例如代碼異常或數據庫關閉)。我不明白的是以下幾點:瞭解休眠事務
13.2。數據庫事務劃分
數據庫或系統事務邊界總是必需的。沒有 與數據庫的通信可能發生在數據庫 事務之外(這似乎混淆了很多習慣了 自動提交模式的開發人員)。始終使用清晰的事務,甚至對 只讀操作
這一個說,一個事務應該在所有情況下使用,即使是只讀操作!
- 爲什麼這是必須的?只有當我要更新數據庫時,我不應該這樣做嗎?
- 如果這是必須的,爲什麼不在獲得會話時自動啓動?
關於以下引用段落(在)。
事務Transaction(org.hibernate.Transaction)
(可選)單線程的,短暫的使用的應用程序指定的工作 原子單元對象。它從底層的JDBC,JTA或CORBA事務中抽象出應用程序。 org.hibernate.Session可能跨越幾個 org.hibernate.Transactions在某些情況下。但是,交易 劃分,無論是使用底層API還是 org.hibernate.Transaction,都不會是可選的。
什麼意思是第一個字(Optional)
表示?
這個聲明是什麼意思?
However, transaction demarcation, either using the underlying API or org.hibernate.Transaction, is never optional.
?!
另外我從this page瞭解到,那每當我打開一個Hibernate session時是否更新或加載一個對象,我都要開始一個事務。
感謝您的回答。但實際上文檔強調使用事務,即使是隻讀操作也是如此。我更多地澄清了我的問題。 –
其誤導性的文件在一定程度上。它只需要在多個操作必須是原子的時候聲明顯式事務,並且全部或全部改變語義。但是,在某些情況下,您可以引發讀鎖,並且您可能希望它們持續多次讀取。我同意你的看法,這個文件有點誤導。 –
根據這篇文章,只有啓用auto_commit https://community.jboss.org/wiki/Non-transactionalDataAccessAndTheAuto-commitMode時,才需要只讀操作事務 – peceps