有人知道Hibernate如何在调用session.saveOrUpdate()时知道是在数据库中插入还是更新一个值吗?

到目前为止,我只确定它不依赖于缓存中的信息,数据库中实体的存在由主键决定.

推荐答案

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

documentation人中:

saveOrUpdate()执行以下操作:

  • 如果该对象已经是持久性的 在此会话中,请不要执行任何操作
  • 如果另一个对象与
  • 如果对象没有标识符
  • 如果对象的标识符具有 值分配给新的 实例化的对象,则保存()它
  • 如果对象的版本由 "版本"或"时间戳",以及 版本属性值相同 值分配给新的 实例化的对象,则保存()它 否则更新()对象

Database相关问答推荐

在多组MongoDB中查找最新文档的有效方法

powerapps 中的 ClearCollect 未按预期收集数据

Mongodb聚合$group,限制数组长度

sql-dump 有什么用?

函数到关系映射比对象到关系更容易吗?

在 model.save() 中处理竞争条件

Android Room持久性库@Update不起作用

MySQL workbench:如何将 mysql 数据库导出到 .sql 文件?

SQLite3 的动态类型

Symfony ArrayCollection 与 PersistentCollection

我如何知道何时索引列以及使用什么索引?

哪个提供更好的性能一个大连接或多个查询?

什么是数据库中的死锁?

在 postgresql 中将 varchar 列升级为枚举类型

如何一次插入1000行

XML、CSV 或数据库格式的 ICD-9 代码列表

For循环或数据库调用哪个更好?

C# IEnumerator/yield struct 可能不好?

用于 sql 表中的状态列的类型

从 SQLAlchemy 中的文件执行 SQL