JPA - изменить автоматически сгенерированные таблицы ссылок с отметкой времени - PullRequest
0 голосов
/ 30 ноября 2011

Я ищу способ расширения автоматически сгенерированных таблиц ссылок между двумя объектами в отношении OneToMany с помощью дополнительного столбца отметки времени.

Какова цель?Каждая сущность имеет временную метку, которая показывает время последнего изменения.Но нет никакого способа увидеть, какие изменения были сделаны.Нам необходимо видеть, в какое время было выполнено назначение между Местом и Событием.

@Entity
public class Place{    

    @OneToMany(cascade = CascadeType.ALL, orphanRemoval = true)
    private final List <Event> events = new ArrayList<Event>();

    ....

}

В базе данных есть три таблицы.PLACE, EVENT и PLACE_EVENT.Таблица PLACE_EVENT имеет два столбца: PLACE_ID и EVENT_ID.

Я хочу третий столбец "CREATED" с простой отметкой времени.Есть ли способ генерировать эту метку времени в автоматическом режиме.Я не хочу создавать новую сущность PLACE_EVENT самостоятельно.

Я не уверен, возможно ли это, но я благодарен за любые подсказки.

Я использую jpa 2.0 вeclipselink и драйвер db2.

Ответы [ 2 ]

0 голосов
/ 30 ноября 2011

Вы можете использовать триггер для генерации метки времени, если вы просто хотите, чтобы она была в базе данных. Вы также можете переопределить insertSQL своего отображения, чтобы включить временную метку сервера, используя DescriptorCustomizer.

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

0 голосов
/ 30 ноября 2011

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

Но учтите, что иногда (я не помню точно, в каких случаях), когда Hibernate добавляет новую сущность B в A, он удаляет все строки, ссылающиеся на A, из таблицы соединения и повторно вставляет их все.

Также обратите внимание, что поле метки времени будет заполнено в базе данных, но не будет доступно для объектов Hibernate. Только SQL-запросы будут иметь доступ к отметке времени.

...