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

会话中保存,更新,saveOrUpdate,合并方法之间的区别?

汤英豪
2023-03-14
问题内容

我是Hibernate的新手,上周完成了Hibernate教程。我对Session类中的方法save,update,saveOrUpdate和merge有一些疑问。这些是:

  • 保存方法: 用于将新创建的对象插入数据存储区。(为此,基本标识符值将为0)。就像我创建一个新客户并调用保存操作一样,它将把它持久保存在数据存储区中并生成标识符。

它是否正确?如果我们在已经存在的对象上调用保存,则不确定会发生什么?

  • 更新方法: 用于更新数据存储区中已经持久的对象。(基本上,标识符值将为此一些非零值)。就像我加载新客户并在某些字段值更新后调用更新操作一样,它将在数据存储区中对其进行更新。

根据我的理解,它应该会因某些异常而失败,因为根据API更新是针对分离对象的。它是否正确?如果是的话,我们应该在同一会话中调用什么来更新对象(我的意思是如果对象未分离)。另一点是:如果我们调用新创建的对象的更新,将会发生什么?

  • saveOrUpdate方法: 它将基于未保存的值检查(上述操作必须基于标识符零或非零值进行,是吗?),因此将调用上述方法之一,因此,如果我们拥有持久的客户对象,并且更新其客户的姓氏并创建新帐户,然后saveOrUpdate会处理。

我理解正确吗?

  • 合并方法: 它的作用类似于更新,但是在这里,如果会话中已经存在具有相同标识符的持久对象,它将更新持久对象中的分离对象值并将其保存。

但是,如果当前没有与该会话相关联的持久实例,则这将从数据存储中加载持久对象,然后在已加载的持久对象中更新分离对象的值,然后对其进行更新。

我也明白了吗?


问题答案:

您在所有评估中都完全正确。你懂了。

对于您的第一个问题,如果我没记错的话,请save专门进行插入。因此,再次调用save将导致数据库中的另一行。

对于第二个问题,请update更新会话中的对象。因此,如果对象在会话中,它将进行更新。如果对象不在会话中,则应调用merge。我相信,调用update分离的实例将导致异常。



 类似资料:
  • 我正在学习hibernate和Spring Boot(也是Thymeleaf),遇到了以下问题: 环境:我有一个表单,处理创建和更新数据基于ID参数在GET方法,如果ID等于数据库中的一行,那么更新,否则保存。ID存储在隐藏的输入标记中,并与表单数据一起插入到实体对象中。然后将该对象发送给一个服务,该服务调用DAO来使用saveOrUpdate()方法保存或更新数据。 问题总结:在我的服务中,我有

  • 问题内容: 通常我已经阅读过save()方法为对象生成新标识符,并且仅触发 INSERT 并保存它,它不会更新它,而saveOrUpdate()方法可能会 插入 或 UPDATE 记录。 但是根据我的经验,在这里我可以通过示例代码更好地进行解释, 假设有 A类 ,我觉得从记录 表A 的 所以现在我有了一个持久对象, 现在,我试图通过简单地修改某些字段来使用save方法保存记录, 现在我开除 因此,

  • 我有一个问题,过去几天我一直在网上搜索。我发现有类似问题的人,但世卫组织的解决方案并没有改善我的状况。 最令人恼火的是,我以前一直在使用它,没有任何问题或障碍。 问题是,我在java web应用程序上的会话要么在请求之间被删除,要么一开始就无法正确创建。 一些简单的故障排除: 我可以很好地创建和使用cookie。 每次我刷新或跟踪指向servlet或jsp的链接时,jsesionid都会得到一个新

  • 问题内容: Hibernate有几种方法,它们以一种或另一种方式将您的对象放入数据库。它们之间有什么区别,何时使用它们?为什么不只有一种智能的方法知道何时使用什么? 到目前为止,我已经确定的方法是: 问题答案: 这是我对方法的理解。这些主要基于API,尽管我在实践中并未全部使用。 saveOrUpdate 根据某些检查调用保存或更新。例如,如果不存在标识符,则调用save。否则,将调用更新。 保存

  • 问题内容: 除以下内容外,我们还有其他区别吗?另外请验证以下内容是否正确 每个应用程序一个对象,每个客户端一个对象。 是创建和管理。是为映射的类提供CRUD接口,并提供更多功能。 是线程安全的,而不是线程安全的 问题答案: 首先,询问这些接口之间的区别没有任何意义。好像在问汽车制造厂和汽车之间的区别。制造工厂是生产汽车的地方。同样,是一个将创建对象的实例。

  • 我可以通过以下方法将数据发送到Firebase FiRecovery文档: 1) 添加() 2) set() 我很清楚,如何将数据添加到Firestore中,其中没有任何混淆。但我的问题是,Firebase Firestore中的方法“set”有两个setOption,例如merge和mergefields。这两组选项之间的区别是什么,我认为这两个选项的作用是相同的。如何实现setOption“m