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

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

Давайте предположим следующую модель данных «многие ко многим»:

Contract (any business entity)
- contract_id
- other fields

Party (another business entity)
- party_id
- other fields

Contract_Party (relations between first two 
with additional role indicator, e.g. owner, signer, seller, etc)
- contract_id
- party_id
- role

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

@OneToMany
@JoinTable(
  name="Contract_Party", 
  joinColumns = {@JoinColumn(name="party_id", referencedColumnName="party_id")},
  inverseJoinColumns = {@JoinColumn(name="contract_id", referencedColumnName="contract_id")}
}
private List<Contract> contracts;

Это хорошо.

Но то, что я ищу, это как составить карту контрактов сособая роль?

@OneToMany
@??? ( "ROLE = 'SIGNER' ")
private List<Contract> signedContracts;

Технически я ищу способ добавитьдополнительное условие в заявление JOIN.

На данный момент найдены следующие идеи в похожих темах:

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

Спасибо!

Ответы на вопрос(2)

Ваш ответ на вопрос