2

我看到很多hibernate的例子和实用代码,在更新一些对象之前,它首先用它们的身份查询它们,然后设置需要更新的属性,我知道查询它们会将对象附加到当前打开的会话,并在提交与会话关联的事务时进行更新。但是hibernate有很多方法可以使用它的id来更新一个对象,而不用先查询出来,例如使用hql,会少一个查询,对性能有好处,那为什么这么多代码选择查询出来更新之前呢?

4

1 回答 1

2

造成这种情况的一个原因是批量操作 (UPDATEDELETE) 被转换为“纯” SQL 并绕过持久性上下文。

当以这种方式直接更新数据库中的实体时,如果相关实体已经在持久化上下文或缓存中,它们将变得陈旧。

然后,如果您想避免过时的数据,则必须使每个可能包含受影响实体的缓存无效或重新获取所有可能受影响的实体。

于 2013-10-22T15:22:32.327 回答