我想知道是否有人可以告訴我什麼是休眠髒會話?我似乎遇到了一個問題,即當標準查詢不應該執行插入操作時。我相信這是與一個骯髒的會議有關,但不知道真正的骯髒的會議是什麼,我無法解決我的問題。另外,你如何創建一個骯髒的會議。謝謝。什麼是Hibernate髒會話?
回答
Hibernate的會話是緩存中保存的更改。它緩存從數據庫中讀取的實體,它還緩存對包含的實體所做的更改以及添加和刪除的實體,直到會話刷新(即將所有掛起的更改寫入數據庫)。
一個會話被稱爲髒當一些變化還沒有被刷新。因此有一個骯髒的會議是完全正常的。會話在事務提交之前刷新。
它只是意味着你已經對尚未刷新到數據庫的內存中,管理的持久對象進行了更改。
基本上,休眠背後的想法是,在內存中的持久對象的狀態是是應用程序的狀態。如果您對託管對象進行更改,則hibernate將在下一次機會中將其放入數據庫中。你不應該對你不打算持久化的託管對象進行'臨時'更改,因爲它們將會!
在執行查詢之前,hibernate將所有託管對象的內存狀態刷新到數據庫,以便查詢相對於應用程序的狀態是準確的。
實際上,它比這更復雜:只有當掛起的更改可能會影響執行的查詢時,纔會刷新Hibernate。 –
是否有推薦的方法來阻止查詢在我告訴它插入對象之前執行插入操作?我用setFetchMode手動工作,但我覺得這可能只是一個樂隊援助修復,而不是根修復。 –
如果您不希望在事務結束前執行插入和更新操作,則可以在SessionFactory中將整個應用程序的FlushMode更改爲COMMIT,而不是MANUAL。不過,如果您要對不想寫入數據庫的託管實體進行更改,而不僅僅是一個bandaid,那麼這是修復程序。 – Affe
Hibernate中的一個髒會話是當你在會話中加載一個對象然後修改它的時候。
或者,當您打開會話並創建一個新對象時。
即使你沒有可明確調用任何插入/更新操作時,Hibernate標誌着會話髒當會話關閉
簡而言之:我們知道髒數據是尚未提交的數據。以同樣的方式,hibernate中的dirty會話包含尚未提交的已修改數據。
- 1. 什麼是會話和會話變量?
- 2. 什麼是髒資源?
- 3. 爲什麼我的Hibernate會話總是空?
- 4. 參考Spring-Hibernate的「事務同步會話」是什麼意思?
- 5. 爲什麼Hibernate似乎是爲短期會話而設計的?
- 6. 什麼是Postgres「會話」?
- 7. 什麼是會話失效?
- 8. 什麼是無Cookie會話?
- 9. 當Hibernate刷新會話時,它如何決定會話中的哪些對象是髒的?
- 10. 我不明白爲什麼Hibernate會創建2個會話?
- 11. 什麼是由Hibernate
- 12. 什麼會導致Hibernate InvalidStateException
- 13. Hibernate會話保存
- 14. 片狀Hibernate會話?
- 15. Hibernate會話同治
- 16. 什麼是DataGridView按鈕的髒狀態?
- 17. 什麼是髒更新在asp.net mvc
- 18. 術語「髒物」是什麼意思?
- 19. 與struts2的Hibernate集成 - 會話是空
- 20. Hibernate會話是否保存異步?
- 21. Hibernate會話方法saveOrUpdate()和merge()之間有什麼區別?
- 22. 爲什麼System.out.println()可以解決我的Hibernate會話?
- 23. 爲什麼Hibernate會話的行爲如此
- 24. 爲什麼Hibernate沒有將會話設置爲自動關閉?
- 25. 什麼是OS X會話類型,它們是什麼意思?
- 26. NHibernate - 刷新會話後仍然髒
- 27. NHibernate.Linq:會話變髒後選擇
- 28. 會話每會話有什麼好處?
- 29. 代碼髒話
- 30. 在Java中,Hibernate會話,JSP/Servlet會話和會話事務管理之間有什麼區別
如果我不希望查詢觸發刷新,我應該設置標準查詢setFlushMode爲手動,還是你concided此樂隊援助固定? –
@George如果您不想保存對對象所做的更改,請嘗試在會話外執行這些更改 – richarbernal
我想我必須查找有關如何在會話之外存儲數據的其他信息。我對hibernate仍然很陌生,所以不能完全確定它是如何進入會話的。 –