14

我想知道是否有人可以告诉我什么是休眠脏会话?我似乎遇到了一个问题,即条件查询在不应该执行插入时执行了插入。我相信它与脏会话有关,但在不真正知道脏会话是什么的情况下,我无法解决我的问题。另外,如何创建脏会话。谢谢。

4

4 回答 4

25

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

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

于 2012-05-29T18:34:08.733 回答
7

Hibernate 中的脏会话是指在会话中加载对象然后对其进行修改。

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

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

于 2012-05-29T18:33:45.957 回答
4

简而言之:正如我们所知,脏数据是尚未提交的数据。同样,休眠中的脏会话包含尚未提交的修改数据。

于 2016-02-05T09:15:20.400 回答
2

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

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

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

于 2012-05-29T18:33:30.830 回答