Мне нужно сопоставить схему крупной корпоративной базы данных. Поскольку ряд устаревших приложений зависит от этой схемы, я не могу ее изменить из составных клавиш в суррогатные ключи (кроме использования представлений вместо триггеров для ~ 70% объектов базы данных), что привело меня к ряду проблем не знаю, как победить.Hibernate - сопоставление композитных отношений с непервичными ключами
- Как отобразить таблицы, которые имеют суррогатный ключ (первичный, автоматическое приращение) и составной уникальный ключ, к которому ряд таблиц образует много-к-одному отношения над суррогатным ключом, и в том же сколько унаследованных таблиц связано с уникальным композитом?
- Что делать, если несколько отношений по составным ключам разделяют один и тот же компонент (Naselja: Korisnik/Opcina, Korisnik/Grad)? Hibernate говорит мне, что я не могу использовать один и тот же столбец (Корисник) дважды, если не добавить «updatable = false, insertable = false» в аннотацию @JoinColumn. Но когда я это делаю, я получаю сообщение о том, что все компоненты отношения должны иметь одинаковые настройки для вставляемых и обновляемых. Как мне обновить или вставить второе отношение?
- Вставка строки в таблицу «Улис» даст мне ошибку «org.hibernate.AnnotationException: referendedColumnNames (Korisnik, Naselje) из lc.data.hibernate.Ulice.naselja, ссылающийся на lc.data.hibernate.Naselja не отображается на единственное свойство ", если в таблице« Naselja »я явно не добавляю отношение« один к одному »к таблице« Корисни »в модели, которая не отражает фактическую схему базы данных.
От того, что я до сих пор читал JPA doesn't support relationships to non-primary keys, но people still do it. Также моя вторая проблема might be solved with Hibernate 5, но я надеюсь на какой-то хороший совет, какой маршрут взять здесь.
модель испытания, скрипты базы данных и проекты:
Java NetBeans example projects
Одна из идей, которые у меня были, заключается в установке updatable = false , insertable = false для всех отношений Hibernate, явно отображающее каждое поле в ta и обрабатывать отношения вручную ... Это работает, но кажется очень неправильным :) – Vedran