【问题标题】:saveOrUpdate(Object) method of HibernateHibernate 的 saveOrUpdate(Object) 方法
【发布时间】:2010-06-21 12:49:28
【问题描述】:

当我使用 Hibernate 的 saveOrUpdate(Object) 方法时。我怎么知道该行已更新或新行添加到表中???方法saveOrUpdate(Object)的返回类型为void,调用该方法后查不到结果。

请帮助我。

【问题讨论】:

    标签: nhibernate


    【解决方案1】:

    据我所知,从您的问题和评论中得知。您可以创建一个事件监听器并实现两个接口:IPreUpdateEventListener、IPreInsertEventListener

    e.q.

         public class AuditEventListener : IPreUpdateEventListener, IPreInsertEventListener
        {
    
            public bool OnPreUpdate(PreUpdateEvent @event)
            {
                //your stuff here
                return false;
            }
    
            public bool OnPreInsert(PreInsertEvent @event)
            {
    
                //your stuff here
                return false;
            }
    }
    

    但我认为这很荒谬。使用 ORM 意味着您不关心持久性,所有工作都由工作单元完成。如果你真的需要插入和更新,只需使用 Save() 或 Update() 方法,这样你就可以准确地知道做了什么操作。

    【讨论】:

      【解决方案2】:

      如果您要持久化的对象的标识符属性设置为 0(/id null),则表示它是一个新对象,将新插入到 db 中。 插入后,休眠将在标识符字段中设置 id 值。 如果该对象已经设置了标识符属性,则表示该对象已经持久化并且可以更新

      编辑:你看过休眠拦截器吗?可能这很有用。 example

      【讨论】:

      • 是的,你是对的 daedlus,但是就像我们使用 save() 方法一样,它返回可序列化的,我们可以存储在 Long 变量中,如果它大于 0L 意味着添加了行,但是当我们使用 saveOrUpdate()方法它不返回任何内容,所以我们如何知道它已更新或添加任何行。任何方法或代码?提前致谢
      • 上述检查是否不足以知道行是否已插入或更新?你的用例是什么?
      猜你喜欢
      • 1970-01-01
      • 2015-12-11
      • 1970-01-01
      • 2011-05-26
      • 1970-01-01
      • 2019-08-23
      • 2015-04-11
      • 2018-05-25
      • 1970-01-01
      相关资源
      最近更新 更多