刷新会话时,Hibernate处理将对会话中的对象所做的任何更改持久化。如果对象的实例已经在会话中,则更新可能会失败。在这种情况下,应使用合并。它将分离对象的更改与会话中的对象(如果存在)合并。
更新:如果您确定该会话不包含具有相同标识符的已经存在的实例,则使用更新将数据保存在hibernate状态
合并:如果您想在不知道会话状态的情况下随时保存修改,请在hibernate状态下使用merge()。
当实体实例处于持久状态时,在刷新会话时,您对此实例的映射字段所做的所有更改都将应用于相应的数据库记录和字段。可以将持久实例视为“联机”,而分离的实例已变为“脱机”并且不受监视以进行更改。
这意味着,当您更改持久对象的字段时,无需调用save,update或任何这些方法即可将这些更改获取到数据库:您所需要做的只是提交事务,或刷新或关闭会话,当您完成后。重要的是要了解所有方法(持久,保存,更新,合并,saveOrUpdate)不会立即导致相应的SQL
UPDATE或INSERT语句。 将数据实际保存到数据库是在提交事务或刷新Session时发生的 。



