В спящем режиме, как я всегда использую метку времени сервера базы данных? - PullRequest
1 голос
/ 16 марта 2010

Я хотел бы добавить метку времени сервера БД в столбец last_update моей таблицы Как мне этого добиться в спящем режиме?

Спасибо

Ответы [ 3 ]

1 голос
/ 16 марта 2010

Это не очень хорошее решение, но оно работает. Используйте свойство формулы.

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

Поместите это поле в некую фиктивную сущность, и вы сможете извлечь дату из своей базы данных SQL, а оттуда вы можете назначить ее в свой столбец last_update.

Я довольно долго искал и не нашел более простого способа сделать это.

0 голосов
/ 17 марта 2010

Я использовал HQL, и он работал

entity.setLastUpdate((Date) session.createSQLQuery(
        "select getdate()").list().get(0))
0 голосов
/ 16 марта 2010

Вы можете создать новый 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...