JPA @JoinTable с дополнительными условиями соединенияJAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 JPA @JoinTable с дополнительными условиями соединения

Сообщение Anonymous »

Я потратил пару часов на поиск и не нашел ничего похожего на мой случай.

Предположим, что мы используем модель данных «многие ко многим»:

Договор (любой субъект хозяйствования)
- идентификатор контракта
- другие поля

Сторона (другой субъект хозяйствования)- party_id
- другие поля

Contract_Party (отношения между первыми двумя
с дополнительным индикатором роли, например, владелец, подписывающая сторона, продавец и т. д.)
- Contract_id
- party_id
- role


Теперь предположим, что я хочу сопоставить все контракты, связанные с party (однонаправленный). Это можно сделать, используя следующие аннотации в классе сущности Party:

Код: Выделить всё

@OneToMany
@JoinTable(
name="Contract_Party",
joinColumns = {@JoinColumn(name="party_id", referencedColumnName="party_id")},
inverseJoinColumns = {@JoinColumn(name="contract_id", referencedColumnName="contract_id")}
}
private List contracts;
Это нормально.

Но я ищу, как сопоставлять контракты с помощью особую роль?

Код: Выделить всё

@OneToMany
@??? ( "ROLE = 'SIGNER' ")
private List signedContracts;
Технически я ищу способ добавить дополнительное условие в оператор JOIN.

На данный момент найдены следующие идеи в похожих темах:
  • сопоставить таблицу объединения как отдельную сущность и выполнить фильтрацию по роли с помощью настраиваемых запросов;
  • Hibernate имеет аннотацию @JoinFormula, но нет возможности применить ее внутри @JoinTable;
  • Hibernate также имеет аннотацию @Where, но добавляет условие для Таблица контрактов не для таблицы соединения;
  • используйте @MapKeyColumn и возвращайте карту вместо списка, но я могу иметь несколько контрактов для одной роли;
  • создать представление на стороне БД (это действительно работает :)
Спасибо!

Подробнее здесь: https://stackoverflow.com/questions/279 ... conditions
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»