Спящие сущности: столбцы без свойств сущностей - PullRequest
0 голосов
/ 05 мая 2010

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

Однако в отображении hibernate должны быть определены свойства информации аудита.

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

Ответы [ 3 ]

1 голос
/ 05 мая 2010

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

0 голосов
/ 05 мая 2010

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

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

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

0 голосов
/ 05 мая 2010

Я бы указал отображение информации аудита как компонент фактической сущности, например ::100100

<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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...