Я работаю с устаревшей базой данных.
Я использую JPA 2.x
У меня есть:
- таблица BUSINESS_ORDER, содержащая доменные объектыс PK + естественным бизнес-ключом
- таблица BUSINESS_LEDGER, содержащая доменные объекты с PK + составным естественным бизнес-ключом
- таблица INTEGRATION, содержащая сопоставление между двумя предыдущими таблицами: PK + FK_BUSINESS_ORDER+ FK_BUSINESS_LEDGER
В моих сущностях JPA:
- для сущности BUSINESS_ORDER, я хотел бы скрыть идентификатор в пользу раскрытия бизнес-ключа.Разоблачение бизнеса, а не ключ Infrastruture.
- для сущности BUSINESS_LEDGER, то же самое.Инкапсулируйте идентификатор и предоставьте ключ buiness
- для объекта INTEGRATION. Я хотел бы использовать бизнес-ключи, а не идентификатор.Я действительно не хочу отображать отношения.Только ссылки, потому что это не имеет смысла с точки зрения бизнеса.Просто хранение ссылок (бизнес-ключей) актуально и полезно.Объект интеграции предназначен для запросов и хранения ссылок (например, таблицы соединений: D)
Мой вопрос: как спроектировать объект INTEGRATION?Я создаю экземпляр нового объекта Integration, задаю Бизнес-ключи (код заказа и код бухгалтерской книги) и сохраняю его.Во время сохранения коды транслируются в свои PK и вуаля.При загрузке объекта INTEGRATION PK преобразуется в его код.
- Если я не использую аннотацию @ManyToOne;
- Если я использую @Converter, мне нужно преобразовать бизнес-ключ в PK и каждый раз делать запрос внутри Converter (ewwww).Кажется, немного излишним или сложным.
- Если я использую @SecondaryTable (не используется по умолчанию для этой аннотации).Я действительно не знаю, как это реализовать
Обновление 1: Возможно, ответ заключается в использовании @Embeddable с @OneToOne для объекта ORDER, например, или частичногоvie объекта Order (только id / code) внутри встраиваемого объекта.