NHibernate устанавливают свойства автоматически на сохранении

С Java 8 я стал использовать следующий шаблон:

private static final Map<String, Integer> MAP = Stream.of(
    new AbstractMap.SimpleImmutableEntry<>("key1", 1),
    new AbstractMap.SimpleImmutableEntry<>("key2", 2)
).collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));

Это не самый лаконичный и немного обходной путь, но

  • он не требует все, что находится за пределами java.util
  • , является безопасным и легко приспосабливается к различным типам ключей и значений.
11
задан awilinsk 20 July 2009 в 13:53
поделиться

2 ответа

Перехватчики могут это сделать:

http://www.nhforge.org/doc/nh/en/index.html#manipulatingdata-interceptors (9.10, ссылка не t всегда работает).

Вырезать / вставить из документа:

public class AuditInterceptor : IInterceptor
{
    ...

    public boolean OnSave(object entity,
                          object id,
                          object[] state,
                          string[] propertyNames,
                          IType[] types)
    {
        if ( entity is IAuditable )
        {
            for ( int i=0; i<propertyNames.Length; i++ )
            {
                if ( "CreateTimestamp" == propertyNames[i] )
                {
                    state[i] = DateTime.Now;
                    return true;
                }
            }
        }
        return false;
    }

}

OnFlushDirty () можно использовать для UpdatedDate.

Вам нужно, чтобы каждая сущность, имеющая CreatedDate / UpdatedDate, реализовывала интерфейс, чтобы перехватчик может проверить, должен ли он действовать (в приведенном примере это IAuditable).


Править

Только что заметил главу 11: Перехватчики и события. Вы можете наследовать от EmptyInterceptor, что упрощает работу, если вам нужно только переопределить некоторые методы.

Я никогда не использовал Events.

11
ответ дан 3 December 2019 в 09:20
поделиться

Вы также можете посмотреть на систему управления версиями NHibernate, которая может вам помочь в вашем случае;)

1
ответ дан 3 December 2019 в 09:20
поделиться
Другие вопросы по тегам:

Похожие вопросы: