JPA Заменить бизнес-ключ первичным ключом - PullRequest
0 голосов
/ 03 марта 2019

Я работаю с устаревшей базой данных.

Я использую 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) внутри встраиваемого объекта.

...