Hibernate saveOrUpdate 与 session 中的另一个对象

标签 hibernate orm

如果已经有一个使用该标识符的对象加载到 session 中,是否有任何方法可以使用 Hibernate 保存对象?

  • 执行 session.contains(obj) 似乎仅当 session 包含该确切对象(而不是具有相同 ID 的另一个对象)时才返回 true。
  • 如果对象是新的,则使用 merge(obj) 会引发异常

最佳答案

您是否尝试过调用.SaveOrUpdateCopy()? 如果 session 中存在具有相同 id 的实体或者根本没有实体,它应该在所有实例中都有效。这基本上是一种包罗万象的方法,因为它将 transient 对象转换为持久对象(保存),更新对象(如果存在)(更新),甚至处理实体是否是已存在对象的副本(复制) .

如果做不到这一点,您可能必须在附加(.Update())您的"new"对象之前识别并 .Evict() 现有对象。 这应该很容易做到:

IPersistable entity = Whatever(); // This is the object we're trying to update
// (IPersistable has an id field)
session.Evict(session.Get(entity.GetType(), entity.Id));
session.SaveOrUpdate(entity);

尽管上面的代码可能会对 .Get() 调用进行一些空检查。

关于Hibernate saveOrUpdate 与 session 中的另一个对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26450/

相关文章:

hibernate - 如何在 NetBeans 中包含 Hibernate Javadoc?

hibernate - 为什么需要传统的 Hibernate?

c# - 更改 NHibernate 中的初始 LazyLoad 行为

java - Hibernate:@EmbeddedId、继承和@SecondaryTable

java - Hibernate 上的字符串枚举

java - 我如何使用 hibernate 生成迁移?

java - Hibernate 删除级联对象

Django QuerySet 按表达式排序

java - Postgresql 日期类型和 java SimpleDateFormat

java - @GeneratedValue(strategy ="IDENTITY") 与 @GeneratedValue(strategy ="SEQUENCE")