簡體   English   中英

休眠會話與事務

[英]Hibernate Session vs Transaction

我對 Hibernate 中的會話和事務的概念有點困惑。 據我了解,Hibernate 使用會話(持久性上下文),它基本上是需要在數據庫中持久化、刪除或其他任何實體的緩存。 會話封裝了事務,所以我啟動一個會話,然后創建一個事務。 關閉事務后,持久性上下文中的所有內容都會刷新到數據庫。如果我關閉會話,也會發生同樣的事情。

為什么我兩者都需要? 我可以在不創建交易的情況下做同樣的事情嗎?

首先,您可以在同一個會話中打開多個事務。

現在,刷新不一定與事務提交有關。 當您save()一個實體時 - 如果您使用身份生成策略,它將被刷新。 當您select某些內容時 - 會話也將刷新(如果刷新模式為自動)。 您甚至可以告訴 Hibernate 在事務提交之前不要刷新(刷新模式 MANUAL)。

事務只對 ACID 負責,它是一個 DB 特性。 而Session負責管理實體,生成SQL,處理事件。 這是Java的事情。

PS:會話不僅僅是一個“緩存”。 這也是一種跟蹤更改了哪些實體的方法。 所以這不僅僅是一個優化技巧。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM