我一直在使用Hibernate / Spring。我有一个小疑问。如果我们从一个表中获取1000条记录并使用saveOrUpdate()
方法保存到另一个表,则会保存。
如果我通过传递相同的1000条记录而不修改任何记录来调用相同的方法,那么hibernate在这里的行为如何?它会触发1000个更新查询还是巧妙地识别记录是否真的被修改过?
谢谢!
答案 0 :(得分:2)
我不认为无论状态如何都会执行update
。 Hibernate中的实体具有某种dirty flag,表示该对象自从数据库中检索后是否已被更改。
答案 1 :(得分:0)
如果使用相同的会话对象加载和保存这1000条记录,则不会触发任何更新脚本。如果加载1000条记录并使用不同的会话对象保存,则hibernate将触发1000次更新查询。
答案 2 :(得分:0)
如果您在此处使用其他会话,我认为它不会进行更新。
为了执行saveOrUpdate,Hibernate将首先将实体加载到新会话中。然后它将检查您要保存的实体是否脏。如果它不脏,则不会执行更新。
这里的关键是Hibernate不会在对象上运行,除非它在会话中。无论您使用的是同一会话还是新会议。