什么是Hibernate脏会话?

时间:2012-05-29 18:29:53

标签: java hibernate

我想知道是否有人能告诉我什么是hibernate脏会话?我似乎遇到了一个问题,即标准查询在不应该执行插入时执行。我相信它与脏会话有关,但如果不确切知道什么是脏会话,我就无法解决我的问题。另外,如何创建脏会话。谢谢。

4 个答案:

答案 0 :(得分:20)

Hibernate会话是一个缓存。它缓存从数据库读取的实体,它还缓存您对其包含的实体所做的更改,以及添加和删除的实体,直到刷新会话(即所有挂起的更改都写入数据库)。 p>

当某些更改尚未刷新时,会话被称为 dirty 。因此,有一个肮脏的会话是完全正常的。在提交事务之前刷新会话。

答案 1 :(得分:6)

Hibernate中的脏会话是在会话中加载对象然后修改它。

或者,当您打开会话并创建新对象时。

即使您没有明确地调用任何插入/更新操作,Hibernate也会将会话标记为并在会话关闭时保存更改

答案 2 :(得分:3)

简单来说:我们知道脏数据是尚未提交的数据。同样,hibernate中的脏会话包含尚未提交的修改数据。

答案 3 :(得分:2)

这只是意味着您已经对尚未刷新到数据库的内存,托管,持久对象进行了更改。

基本上hibernate背后的想法是内存持久对象的状态是应用程序的状态。如果您对托管对象进行了更改,那么hibernate将在下一次机会将其放入数据库中。您不应该对您不打算持久化的托管对象进行“临时”更改,因为它们将是!

在执行查询之前,hibernate会将所有托管对象的内存状态刷新到数据库,以便查询相对于应用程序的状态是准确的。