簡體   English   中英

了解交易如何運作

[英]Understanding how transactions work

我正在使用Spring並使用休眠和JPA。 當我為我的方法提供事務性上下文時,我想知道它是如何工作的。 例如,我有一些實體類人員。 我創建了一個Person bob並保留了該實體。 如果我調用getPersonByName("bob") ,交易結束前會返回bob嗎?

簡短的答案是:這取決於如何執行讀取操作。

您可以打開日志記錄並設置測試工具以親自查看。 您可以按照以下說明啟用SQL查詢和參數打印

2個警告:

  1. 我假設執行寫入然后讀取時處於事務范圍內(在Spring @Transactional方法中,默認傳播級別)
  2. 不確定getPersonByName(“ bob”)在下面的工作方式(Spring-Data?或JPQL / HQL?或Criteria?或find()等)。

在Hibernate中, 第一級緩存默認情況下處於激活狀態。 它鏈接到一個Hibernate 會話 ,由它獲取的所有實體都存儲在該會話中。 結果,寫后的后續讀操作不應往返於同一Session中的DB

現在,默認情況下不使用Hibernate的一級緩存 ,除非您使用:

  • EntityManager#find()用於后續的讀取操作
  • 隨后通過上述EntityManager#find()獲取的實體中的getter方法訪問關系
  • 不在任何查詢中使用

暫無
暫無

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

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