Создание набора и время обновления с В спящем режиме в отображениях Xml

Я использую, в спящем режиме с отображениями Xml. У меня есть объект, который имеет два поля creationDate и updateDate типа timestamp, это должно быть заполнено текущим временем UTC, когда объект сохраняется и обновляется. Я знаю о существовании @PrePersist и @PreUpdate аннотации, но я не знаю, как использовать их эквивалент в моих отображениях Xml.

Снова, я задавался вопросом, в спящем режиме ли так или иначе поддержки исходно набор времени обновления и создания.

Спасибо

5
задан Pascal Thivent 9 May 2010 в 13:54
поделиться

2 ответа

Я знаю о существовании @PrePersist и @PreUpdate , но я не знаю, как использовать их эквивалент в своих сопоставлениях Xml.

Архитектура событий Hibernate3 предоставляет нечто эквивалентное, и вы можете зарегистрировать слушателей для PreInsertEvent , PreUpdateEvent или SaveOrUpdateEvent (см. ] org.hibernate.event для полного списка) для установки и обновления дат создания / обновления.

Другой подход заключается в использовании перехватчика либо с областью действия Session , либо с областью действия SessionFactory , а также для установки как createDate , так и updateDate в onSave (...) , обновить updateDate в onFlushDirty (...) .


Обновление: Я оставляю свои первоначальные предложения ниже, но я думаю, что правильный подход (должен был быть моим первоначальным ответом) - использовать перехватчик или архитектуру событий.

Вы можете использовать атрибут сгенерированный метки времени , чтобы получить creationDate и updateDate , сгенерированные базой данных при вставке и при вставке. и обновить соответственно:

<class name="MyEntity" table="MY_ENTITY">
  <id .../>
  <timestamp name="createDate" generated="insert" ... />
  <timestamp name="updateDate" generated="always" ... />
  ...
</class>

Подробную информацию см. в разделе о сгенерированных свойствах .

Вариант 1

Похоже, что отметка времени не поддерживает generatead , поэтому мое предложение не сработает. Тем не менее, более внимательно прочитав документацию, я понял, что отметка времени является альтернативой управлению версиями, и я не думаю, что это подходящий выбор для таких полей, как createDate и updateDate (может работать и в более поздних версиях, но не для этого отметка времени ).

Таким образом, я бы по-прежнему использовал сгенерированные свойства , но с простыми свойствами вместо отметки времени :

<class name="MyEntity" table="MY_ENTITY">
  <id .../>
  <property name="createDate" update="false" insert="false" generated="insert" ... />
  <property name="updateDate" update="false" insert="false" generated="always" ... />
  ...
</class>

На уровне базы данных это будет требуется использовать триггер для столбца updateDate . Для столбца createDate можно использовать что-то вроде current_timestamp в качестве значения по умолчанию. Но триггеры, может быть, и не нужны ...

Вариант 2

Чтобы избежать срабатывания Варианта 1 , можно было бы использовать updateDate для управления версиями (и таким образом сопоставить его как отметку времени ]):

<class name="MyEntity" table="MY_ENTITY">
  <id .../>
  <timestamp name="updateDate" ... />
  <property name="createDate" update="false" insert="false" generated="insert" ... />
  ...
</class>

Тот же подход, что и вариант 1 для createDate , используйте значение по умолчанию на уровне базы данных.

Вариант 3

См. Начало этого ответа ...

9
ответ дан 13 December 2019 в 22:04
поделиться

Метки времени в Hibernate, очевидно, всегда обновляются автоматически при изменении объекта, поэтому вы не можете использовать сопоставление для Дата создания. Однако вы можете сохранить его как простое свойство java.util.Date , инициализировав его с помощью new Date () .

Для отметки времени обновления попробуйте следующее:

public class MyEntity {
  ...
  private Date updateDate;
  ...
}

<class name="MyEntity" table="MY_ENTITY">
  <id .../>
  <timestamp name="updateDate" access="field" column="UPDATE_DATE"/>
  ...
</class>

Обратите внимание, что отметка времени должна стоять сразу после id в отображении.

К вашему сведению, это ссылка на атрибуты отметки времени .

1
ответ дан 13 December 2019 в 22:04
поделиться
Другие вопросы по тегам:

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