我想知道是否有人可以告诉我什么是休眠脏会话?我似乎遇到了一个问题,即当标准查询不应该执行插入操作时。我相信这是与一个肮脏的会议有关,但不知道真正的肮脏的会议是什么,我无法解决我的问题。另外,你如何创建一个肮脏的会议。谢谢。什么是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仍然很陌生,所以不能完全确定它是如何进入会话的。 –