代码之家  ›  专栏  ›  技术社区  ›  Vishal

在hibernate中,如何始终使用db server的时间戳?

  •  1
  • Vishal  · 技术社区  · 16 年前

    上次更新 我的表的列。如何在休眠中实现这一点?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Spencer Ruport    16 年前

    这不是一个很好的解决方案,但它是有效的。使用公式属性。

    <property name='ServerDate' formula='getdate()'/>
    

    将该字段放在某种虚拟实体中,就可以从SQL数据库中提取日期,然后从那里将其分配给 last_update 列。

    我已经做了相当多的搜索,但还没有找到一个更简单的方法。

        2
  •  0
  •   snicker    16 年前

    public class DateTimeSaveOrUpdateEventListener : DefaultSaveOrUpdateEventListener
    {
        protected override object EntityIsPersistent(SaveOrUpdateEvent @event)
        {
            MyEntity ent = @event.Entity as MyEntity;
            if(ent != null)
                ent.LastUpdate = DateTime.Now;
            return base.EntityIsPersistent(@event);
        }
    
        protected override object EntityIsTransient(SaveOrUpdateEvent @event)
        {
            MyEntity ent = @event.Entity as MyEntity;
            if(ent != null)
                ent.LastUpdate = DateTime.Now;
            return base.EntityIsTransient(@event);
        }
    }
    

    var listener = new DateTimeSaveOrUpdateEventListener();
    config.SetListener(NHibernate.Event.ListenerType.SaveUpdate, listener);
    config.SetListener(NHibernate.Event.ListenerType.Save, listener);
    
        3
  •  0
  •   Vishal    16 年前

    我用了HQL,它很管用

    entity.setLastUpdate((Date) session.createSQLQuery(
            "select getdate()").list().get(0))