簡體   English   中英

休眠事務問題

[英]Hibernate transaction problem

當我在Hibernate事務中執行一些查詢時->在mysql中成功更新了數據,但是在我的應用程序中仍然有舊值。 當我重新啟動時-可以。 如果我設置了自動提交模式-可以正常工作,但是我必須使用事務;-)。 有任何想法嗎? 提前致謝。

直接使用UPDATE操作數據庫不會影響會話中緩存的對象。 您應該清除會話(Session.clear())。 就像是:

session.flush()
session.clear()
query.executeUpdate()

甚至更好,您可以通過不使用更新查詢並處理內存中的對象狀態來避免此問題:

myobj.setName(newValue)
session.saveOrUpdate(myobj)    

hibernate無論您使用的是JPA API還是Hibernate的本機API,您使用以下界面運行的任何查詢

  1. 條件(Hibernate Native API)
  2. 查詢(Hibernate Native API)
  3. EntityManager createQuery()(JPA)

查詢不會與第二級或第一級緩存交互。 它們直接訪問數據庫。如果您的查詢正在更新持久性上下文中當前的實體,則這些實體將不反映更改。這是默認行為。

為了更新您的上下文以顯示實體的最新狀態,請在Session或EntityManager中使用refresh()來反映持久性上下文中的最新實體狀態。 閱讀下面的文檔以獲取更多信息

http://docs.oracle.com/javaee/7/api/javax/persistence/EntityManager.html#refresh-java.lang.Object-

https://docs.jboss.org/hibernate/orm/3.5/javadocs/org/hibernate/Session.html#refresh%28java.lang.Object%29

否則,按照慣例,請始終在持久性上下文中加載任何數據之前運行DML

希望這會有所幫助:D

暫無
暫無

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

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