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, но я могу иметь несколько контрактов на одну роль;создать представление на стороне БД (этот действительно работает :)Спасибо!