据我所知,如果没有其他具有相同 id 和类型的对象附加到会话,则更新用于将分离的对象置于持久状态。合并不关心状态。如果会话中不存在相同类型的持久对象,它只会返回一个持久对象,或者使用新对象的值更新旧对象。我的问题是关于数据库点击率。 “更新”和“合并”方法是否立即到达数据库?或者当会话关闭时,数据库中的更改会变得明显。
编辑:如果我们通过 save 方法在持久实例上调用 update 方法会发生什么?我认为更新方法仅用于分离的实例。
当会话刷新时,Hibernate 会处理持久保存会话中对象的任何更改。如果会话中已存在该对象的实例,则更新可能会失败。在这种情况下应该使用合并。它将分离对象的更改与会话中的对象(如果存在)合并。
更新:如果您确定会话不包含具有相同标识符的已持久实例,则使用更新将数据保存在休眠中
合并:如果您想随时保存修改而不知道会话的状态,请在 hibernate 中使用 merge() 。
当实体实例处于持久状态时,您对该实例的映射字段所做的所有更改都将在刷新会话时应用于相应的数据库记录和字段。持久实例可以被认为是“在线”的,而分离的实例已经“离线”并且不会监视更改。
这意味着当您更改持久对象的字段时,您不必调用 save、update 或任何这些方法来将这些更改保存到数据库:您所需要做的就是提交事务,或者刷新或关闭会话,当你完成后。
重要的是要了解所有方法(persist、save、update、merge、saveOrUpdate)不会立即生成相应的 SQL UPDATE 或 INSERT 语句。数据实际保存到数据库发生在提交事务或刷新会话时.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)