我对会话中休眠 bean 设置器的行为感到困惑。我以为当你在会话中设置一个 bean 字段时,hibernate 只知道该 bean 是脏的,并且在会话关闭时,这是一个挂起的更新,它将被刷新到数据库中。
但是,我在一个休眠会话中运行了一个测试,在该会话中我通过其 id 获取一个 bean,将一个字段从 true 更改为 false,然后对所有此类 bean 的列表进行 HQL 查询,其中该字段为 false。当我调用 setter 时,“脏”bean 出现在结果集中,就好像 hibernate 已经进行了数据库更新一样。然后我在离开会话之前做了一个 session.clear() 来取消挂起的更新并驱逐所有的 bean。我认为这将有效地丢弃 setter 调用的脏更改。然而我检查了数据库,记录了从真到假的变化。注意:从未在此会话中调用 session.flush()。
看来,只要我调用 bean setter,Hibernate 就必须发出数据库 UPDATE 调用。但这似乎不对?
安迪