一尘不染

休眠saveOrUpdate行为

hibernate

有谁知道Hibernate如何知道在session.saveOrUpdate()调用时是要插入还是要更新数据库中的值?

到目前为止,我仅确定它不依赖于高速缓存中的信息,并且数据库中实体的存在由主键确定。


阅读 242

收藏
2020-06-20

共1个答案

一尘不染

当您使用.saveOrUpdate()Hibernate时,将检查对象是否为瞬态对象(它没有标识符属性),如果是这样,它将通过生成标识符并将其分配给会话来使其持久化。如果对象已经具有标识符,它将执行.update()

文档中

saveOrUpdate()执行以下操作:

  • 如果对象在此会话中已经存在,则不执行任何操作
  • 如果与该会话关联的另一个对象具有相同的标识符,则引发异常
  • 如果对象没有标识符属性,请保存()
  • 如果对象的标识符具有分配给新实例化的对象的值,则将其保存()
  • 如果对象由“版本”或“时间戳记”版本控制,并且版本属性值与分配给新实例化对象的值相同,则save()否则更新()对象
2020-06-20