当前位置: 首页 > 面试题库 >

休眠中更新与合并方法

丌官晨
2023-03-14
问题内容

我知道,如果没有其他具有相同ID和类型的对象附加到会话中,则使用update会将分离的对象置于持久状态。合并不关心状态。如果会话中不存在相同类型的持久对象,或者它使用新对象的值更新旧对象,则它只会返回该对象。我的问题是关于数据库命中的问题。方法“更新”和“合并”是否立即击中数据库?或关闭会话后,数据库中的更改显而易见。

编辑:如果我们通过save方法在持久化实例上调用update方法会发生什么?我认为更新方法仅用于分离的实例。


问题答案:

刷新会话时,Hibernate处理将对会话中的对象所做的任何更改持久化。如果对象的实例已经在会话中,则更新可能会失败。在这种情况下,应使用合并。它将分离对象的更改与会话中的对象(如果存在)合并。

更新:如果您确定该会话不包含具有相同标识符的已经存在的实例,则使用更新将数据保存在hibernate状态

合并:如果您想在不知道会话状态的情况下随时保存修改,请在hibernate状态下使用merge()。

当实体实例处于持久状态时,在刷新会话时,您对此实例的映射字段所做的所有更改都将应用于相应的数据库记录和字段。可以将持久实例视为“联机”,而分离的实例已变为“脱机”并且不受监视以进行更改。

这意味着,当您更改持久对象的字段时,无需调用save,update或任何这些方法即可将这些更改获取到数据库:您所需要做的只是提交事务,或刷新或关闭会话,当您完成后。重要的是要了解所有方法(持久,保存,更新,合并,saveOrUpdate)不会立即导致相应的SQL
UPDATE或INSERT语句。 将数据实际保存到数据库是在提交事务或刷新Session时发生的



 类似资料:
  • 问题内容: 我正在测试休眠并将此查询提供给 我在命令行中得到这些查询: 我使用的是“合并不保存”,所以为什么休眠要更新我的对象,所以不应该更新。对吗 怎么了 问题答案: 我将尝试使用一个更具体的示例进行解释。假设您有以下情况: 尝试重新附加分离的对象时发生异常,userA。 为了解决上述问题,使用了merge(),如下所示:

  • 问题内容: 我在Java J2EE Web应用程序中使用Hibernate 3.5.2和Spring Core 3.0.1。当单独的用户同时更新同一记录时,我得到了StaleObjectStateExcpetion。事务由javax.persistence.EntityManager管理。这是我创建问题的步骤。 User1登录到应用程序 User2登录到应用程序 用户1开始编辑记录A 用户2开始编

  • 问题内容: 我试着通过网络搜索,但是徒劳。有没有一种方法可以使用hibernate来执行幂等更新。 一种用例是使用HTTP PUT通过REST API更新数据库中的特定字段。因此,例如,如果我有一个包含列: _ Id,Name,Phone,UpdateDate*_ 的数据库 _ ,_ 并且我多次用相同的值更新(特定 ID的 ) Phone ( 电话) 字段,那么只有我的第一个操作必须更新 Phon

  • 问题内容: 是否可以在生产环境中运行配置有更新数据库架构的Hibernate应用程序? 问题答案: 不,这是不安全的。 尽管Hibernate团队做出了最大的努力,但是您根本不能依靠 生产中的 自动更新。编写自己的补丁程序,使用DBA对其进行审核,对其进行测试,然后手动应用它们。 从理论上讲,如果 hbm2ddl更新 在开发中起作用,那么它也应在生产中起作用。但实际上,并非总是如此。 即使工作正常

  • 问题内容: 在“旧的JDBC美好时光”中,我编写了许多SQL代码,这些代码仅针对实际更改的“属性/成员”进行了针对性的更新: 例如,考虑具有以下成员的对象: 如果仅在某些业务方法中进行了更改,我将只为该成员发出一个SQL 。 但是,似乎(这是我对Hibernate的“印象”)在使用标准Hibernate映射(映射完整类)时,即使仅单个成员的更新也将导致由Hibernate生成的SQL语句中对象的完

  • 问题内容: 在我的Java应用程序中,我正在使用hibernate .hbm文件访问数据库。是否可以更新表中的主键“ id”列;我的.hbm文件中的“ id”列如下所示: 问题答案: 尝试这个: 或只使用sql: