Вы должны зарегистрировать слушателя для событий перед вставкой и перед обновлением. Вы можете сделать это через вашу конфигурацию так:
<hibernate-configuration>
...
<event type="pre-update">
<listener class="MyListener, MyAssembly"/>
</event>
<event type="pre-insert">
<listener class="MyListener, MyAssembly"/>
</event>
</hibernate-configuration>
, а затем реализовать слушателя - что-то вроде этого (может быть, не совсем точно - списано из моей памяти):
public class MyListener : IPreUpdateEventListener, IPreInsertEventListener
{
public bool OnPreUpdate(PreUpdateEvent evt)
{
if (evt.Entity is IHasLastModified)
UpdateLastModified(evt.State, evt.Persister.PropertyNames);
return false;
}
public bool OnPreInsert(PreInsertEvent evt)
{
if (evt.Entity is IHasLastModified)
UpdateLastModified(evt.State, evt.Persister.PropertyNames);
return false;
}
void UpdateLastModified(object[] state, string[] names)
{
var index = Array.FindIndex(names, n => n == "LastModified");
state[index] = DateTime.Now;
}
}
и сделать то же самое с событием перед обновлением.
РЕДАКТИРОВАТЬ: Это заботится о вставке, а также обновления, и, кажется, работает.