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

时间:2010-03-16 16:06:46

标签: nhibernate hibernate

我想在我的表的 last_update 列中添加db server的时间戳。如何在休眠中实现这一点?

谢谢

3 个答案:

答案 0 :(得分:1)

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

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

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

我已经做了很多搜索,但我找不到更简单的方法。

答案 1 :(得分:0)

您可以创建一个新的SaveOrUpdateEventListener:

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);

答案 2 :(得分:0)

我使用了HQL并且工作正常

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