С 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
Перехватчики могут это сделать:
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.
Вы также можете посмотреть на систему управления версиями NHibernate, которая может вам помочь в вашем случае;)