Как использовать перехватчики гибернации для заполнения дополнительных полей в объединяемой таблице? - PullRequest
0 голосов
/ 23 июня 2009

У меня есть устаревшая объектная модель с объектами content и таблицей, предназначенной для выражения связей между объектами content . Последняя называется таблицей content_content_connections, и в дополнение к первичному ключу от и до содержимого она также содержит 3 других поля. Поле типа соединения и поля идентификатора типа контента как для, так и для контента. Таким образом, в контенте cbjects особый вид соединения может быть аннотирован как

@ManyToMany(fetch = FetchType.LAZY)
@JoinTable(name = "content_content_connections", joinColumns = { @JoinColumn(name = "CONTENT_ID1") }, inverseJoinColumns = { @JoinColumn(name = "CONTENT_ID2") })
@WhereJoinTable(clause = "connection_type_id=1108")
getFoos() { ... }

В настоящее время это отображение только для чтения, которое игнорирует дополнительные столбцы, кроме предложения where. Если я хочу изменить это на отображение для чтения / записи, есть ли способ сделать это без преобразования таблицы соединения в сопоставленный тип? Другими словами, могу ли я использовать перехватчики гибернации, чтобы при сохранении заполнить дополнительные столбцы в объединяемой таблице, которые не отображаются явно?

1 Ответ

0 голосов
/ 23 июня 2009

Вам лучше реализовать SaveOrUpdateEventListener, а не перехватчик.

Обязательно добавьте SaveOrUpdateEventListener следующим образом:

private void initSaveOrUpdateEventListenerHook(Configuration config) {
    List<SaveOrUpdateEventListener> l = new ArrayList<SaveOrUpdateEventListener>();
    SaveOrUpdateEventListener[] listeners =
            config.getEventListeners().getSaveOrUpdateEventListeners();
    l.add(new SaveOrUpdateEventListenerHook());
    l.addAll(Arrays.asList(listeners));
    SaveOrUpdateEventListener[] newListeners = l.toArray(new SaveOrUpdateEventListener[l.size()]);
    config.getEventListeners().setSaveOrUpdateEventListeners(newListeners);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...