Прежде всего, мне нужно сказать, что я не эксперт в Hibernate. Я использовал его только в других проектах. Но теперь я хочу использовать Hibernate в устаревшей схеме базы данных, но у меня возникают некоторые трудности с отображением таблиц в модель домена Java:Модель домена домена до устаревшей базы данных
1) В большинстве таблиц имеется первичный ключ (как строка) пользователем. Поэтому они не генерируются по некоторому алгоритму. На самом деле это то, что Hibernate называет «естественными» ключами. Есть ли способ сообщить Hibernate принять идентификатор, назначенный пользователем?
2) Вторая проблема заключается в том, что множество таблиц имеет некоторые общие свойства: valid_from, valid_to, date_created, date_last_modified, user_last_modified & user_created. Эти свойства используются для аудита (какая запись была изменена каким пользователем) и отключить записи, когда поле даты «valid_to» находится в прошлом. Я не хочу раскрывать эти поля конечному пользователю, потому что они, похоже, являются «метаданными», но я должен найти способ обновить эти поля. Есть ли общее решение в Hibernate, которое я могу использовать для обновления этих полей всякий раз, когда изменяется запись? Для информации эти поля также используются в «таблицах ссылок», которые используются для управления отношениями «многие ко многим» между двумя таблицами.
Вся помощь очень ценится!
update: Я использую AbstractEntity для хранения общих свойств и использования EventListener для вставки/обновления этих полей. Пользователь будет извлекаться кем-то UserContext.getCurrentUser() (пользователь будет привязан к текущему потоку с помощью ThreadLocal).
Единственная проблема теперь в том, как бороться с этими таблицами ассоциации ... Они также содержат эти общие поля, и я не хочу создавать отдельный класс для сопоставления такой таблицы ассоциаций. На мой взгляд, Hibernate отлично справляется с тем, чтобы скрыть такой стол. У меня есть способ обновить такую таблицу ссылок с помощью EventListener?
Например: если таблица A имеет отношение «многие ко многим» с классом B через таблицу ссылок A_B, есть ли способ обновить A_B всякий раз, когда запись вставлена / обновлена на A или B?