I use simmilar code now as a workaround for my previously mentioned problems, but I added a dirty check so it looks like this:
...
protected override object PerformSave(object entity, object id, IEntityPersister persister, bool useIdentityColumn, object anything, IEventSource source, bool requiresImmediateIdAccess)
{
SetModificationDateIfPossible(entity);
return base.PerformSave(entity, id, persister, useIdentityColumn, anything, source, requiresImmediateIdAccess);
}
protected override void PerformUpdate(SaveOrUpdateEvent @event, object entity, IEntityPersister persister)
{
if (@event.Session.IsDirtyEntity(@event.Entity))
{
SetModificationDateIfPossible(entity);
}
base.PerformUpdate(@event, entity, persister);
}
protected override object PerformSaveOrUpdate(SaveOrUpdateEvent @event)
{
if (@event.Session.IsNewEntity(@event.Entity) || @event.Session.IsDirtyEntity(@event.Entity))
{
SetModificationDateIfPossible(@event.Entity);
}
return base.PerformSaveOrUpdate(@event);
}
...
I'd still better like to use the IPre-event listeners...