Предположим, что мы используем модель данных «многие ко многим»:
Договор (любой субъект хозяйствования)
- идентификатор контракта
- другие поля
Сторона (другой субъект хозяйствования)- 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;
На данный момент найдены следующие идеи в похожих темах:
- сопоставить таблицу объединения как отдельную сущность и выполнить фильтрацию по роли с помощью настраиваемых запросов;
- Hibernate имеет аннотацию @JoinFormula, но нет возможности применить ее внутри @JoinTable;
- Hibernate также имеет аннотацию @Where, но добавляет условие для Таблица контрактов не для таблицы соединения;
- используйте @MapKeyColumn и возвращайте карту вместо списка, но я могу иметь несколько контрактов для одной роли;
- создать представление на стороне БД (это действительно работает

Подробнее здесь: https://stackoverflow.com/questions/279 ... conditions
Мобильная версия