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

save和saveOrUpdate方法休眠之间的区别

颛孙哲
2023-03-14
问题内容

通常我已经阅读过save()方法为对象生成新标识符,并且仅触发 INSERT 并保存它,它不会更新它,而saveOrUpdate()方法可能会
插入UPDATE 记录。

但是根据我的经验,在这里我可以通过示例代码更好地进行解释,

假设有 A类 ,我觉得从记录 表A

A a = getHibernateTemplate.findById(7);

所以现在我有了一个持久对象,

现在,我试图通过简单地修改某些字段来使用save方法保存记录,

现在我开除

getHibernateTemplate.save(a);

因此,它只是 更新现有记录 ,但是据我所知 它应该创建新记录

我对certian的事情可能是错的,有人可以解决吗?


问题答案:

保存methodobject存入数据库。它将坚持给定的瞬时实例,首先分配一个生成的标识符。它returns是创建的实体的 ID

鉴于,

SaveOrUpdate()

save()update()基于标识符的调用是否存在。例如,如果标识符存在,update()将被调用,否则save()将被调用。

还有更多类似 persist(),merge(),saveOrUpdateCopy()之类的东西 。几乎全部相同,但功能和可用性略有不同。



 类似资料:
  • 问题内容: 从API中,我可以看到它与代理有关。但是我找不到关于代理的大量信息,也不了解调用和之间的区别。有人可以解释一下或将我定向到参考页面吗? 谢谢!! 问题答案: 在Hibernate论坛中: 摘自《hibernate中的行动》一书。好人读过这个.. 通过标识符检索对象以下Hibernate代码段从数据库检索User对象: get()方法很特殊,因为标识符唯一地标识一个类的单个实例。因此,应

  • 问题内容: 有谁知道Hibernate如何知道在调用时是要插入还是要更新数据库中的值? 到目前为止,我仅确定它不依赖于高速缓存中的信息,并且数据库中实体的存在由主键确定。 问题答案: 当您使用Hibernate时,将检查对象是否为瞬态对象(它没有标识符属性),如果是这样,它将通过生成标识符并将其分配给会话来使其持久化。如果对象已经具有标识符,它将执行。 从文档中: saveOrUpdate()执行

  • 问题内容: 当我使用@Entity注释类并尝试解决依赖关系时,我可以在两个不同的包javax.persistence.Entity和org.hibernate.annotations.Entity中选择包。 javax包是JPA的实体注释,但是为什么会有休眠的实体注释,它与JPA的注释有区别?仅仅是允许定义更多属性的扩展吗? 问题答案: 具有一些尚未标准化的额外属性。仅当直接使用hibernate

  • 问题内容: 两者之间有什么明显的区别 和 问题答案: 它们仅在处理空值时有明显的区别。 这是因为是原始数据类型不能为其分配null,而它的包装器类 可以接受null。 因此,如果column可为空并且您用于 映射实体对象,则对于null 的记录, 将发生错误,因为 无法存储null。

  • 本文向大家介绍Hibernate中save()和persist()之间的区别,包括了Hibernate中save()和persist()之间的区别的使用技巧和注意事项,需要的朋友参考一下 Save()和这两种方法都用于在数据库中保存对象。  根据文档- Save()-坚持给定的瞬时实例,首先分配一个生成的标识符。(或者,如果使用分配的生成器,则使用标识符属性的当前值。)如果关联是用cascade

  • 本文向大家介绍Spring Java中Save和SaveAndFlush之间的区别,包括了Spring Java中Save和SaveAndFlush之间的区别的使用技巧和注意事项,需要的朋友参考一下 Save和saveAndFlush均可用于保存实体。它们都属于Spring数据库。保存可能会或可能不会立即将您的更改写入数据库。当我们调用saveAndFlush时,系统将强制您的模型状态与数据库进行