【问题标题】:Hibernate saveOrUpdate with another object in the session使用会话中的另一个对象休眠 saveOrUpdate
【发布时间】:2010-09-06 18:55:03
【问题描述】:

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

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

【问题讨论】:

    标签: hibernate orm


    【解决方案1】:

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

    否则,您可能必须在附加 (.Update()) 您的“新”对象之前识别并 .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() 调用进行一些空值检查。

    【讨论】:

      【解决方案2】:

      怎么样:

      session.replicate(entity, ReplicationMode.OVERWRITE);
      

      ?

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-08-23
        • 2012-02-23
        • 2014-09-20
        • 2010-11-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-01-01
        相关资源
        最近更新 更多