Spędziłem kilka godzin na wyszukiwaniu i nie znalazłem niczego podobnego do mojego przypadku.JPA @JoinTable z dodatkowymi warunkami łączenia
Przyjmijmy następujące wiele-do-wielu modelu danych:
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
Teraz załóżmy, że chcę map wszystkie kontrakty związane z partii (jednokierunkowa). Można to zrobić za pomocą następujących adnotacji w klasie jednostki 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;
To dobrze.
Ale czego szukam, to jak mapować umowy z szczególną rolą?
@OneToMany
@??? ("ROLE = 'SIGNER' ")
private List<Contract> signedContracts;
Technicznie Szukam sposobu, aby dodać dodatkowy warunekdo JOIN oświadczenie.
Dotychczas stwierdzono następujące pomysły w podobnych tematów:
- mapa dołączyć tabelę jako odrębny podmiot i wykonywać filtrowanie według roli za pomocą niestandardowych zapytań;
- Hibernate ma adnotację @JoinFormula, ale nie ma możliwości zastosowania jej w @JoinTable;
- Hibernate ma również adnotację @Where, ale dodaje warunek dla tabeli kontraktów nie dla tabeli dołączeń;
- użyj @MapKeyColumn i zwróć mapę zamiast listy, ale mogę mieć wiele umów na jedną rolę;
- utworzyć widok z boku DB (ten rzeczywiście działa :)
Dzięki!
Dzięki, działa jak uroku! – Vitaljok
Dzięki za pomysły. Też miałem to pytanie, ale z punktu widzenia takich: Jak mam zadzwonić do wszystkich stron, aby mieć listę umów odpowiadających roli = "podpisowi"? Czy mogę to zrobić za pomocą zapytania? Zapytanie JPA to jest? –
powiązane: '@ JoinFormula' – Blauhirn