2010-05-05 4 views
0

Есть ли способ «магически» сохранить столбец, который не представлен как свойство в сущности? Конкретно я хочу добавить информацию аудита к сущности без информации аудита о сущности. Значения аудита не сохраняются в сущности, а извлекаются из среды во время сохранения объекта. Это происходит в AuditInfoUserType. NullSafeSet получает информацию из SecurityContext вместо чтения из объекта.Объекты спящего режима: столбцы без свойств объекта

Однако при сопоставлении спящего режима необходимо определить свойства информации аудита.

Есть ли способ в спящем режиме определить столбцы без свойств?

ответ

0

Я хотел бы указать информационный аудит отображение в качестве компонента фактического объекта, например:

<class name="EntityName" table="TABLE_NAME"> 

     <property name="name" column="NAME" not-null="true"/> 

     <component name="auditInfo"> 
      <property name="ipAddress" column="IP_ADDRESS"/> 
     </component>   
</class> 

Но, очевидно, для этого вам нужно будет создать поле auditInfo в EntityName классе держать данные аудита когда он готов к установке.

Если вы действительно не хотите включать AuditInfo в класс, я думаю, вам нужно будет сохранить его с помощью SQL.

+0

Есть ли способ изменить гибернации сгенерированного SQL в то время экономии? – paweloque

1

Существует метод onPreparedStatement() в API-интерфейсе перехватчика, который может использоваться для связи с SQL-машиной Hibernate. Для меня это кажется очень рискованным, просто чтобы не иметь частного поля, не имеющего доступа к объекту Entity. Выполнение отдельного SQL внутри слушателя, вероятно, гораздо более надежное, чем попытка вручную выполнить инструкции hibernate. Просто синтаксический анализ, чтобы выяснить, что он используется в качестве псевдонима для вашей таблицы сущностей, будет уродливым, и надеемся, что это не соединение.

0

Вы можете предоставить альтернативные инструкции INSERT и UPDATE для ваших объектов либо в виде аннотаций, либо в файле XML (не спрашивайте меня о синтаксисе).

Просто взгляните на то, что Hibernate изначально создавал (-> Журнал вашего SQL-сервера, его подготовленный оператор) и записывал нечто подобное, которое дополнительно заполняет ваши столбцы аудита.

Но я уверен, что вы уже рассмотрели ON UPDATE триггеров в базе данных и просто не использовать их, потому что вы хотите быть зависит от базы данных ...

Смежные вопросы