Ho passato un paio d'ore a cercare in giro e non ho trovato nulla di simile al mio caso.JPA @JoinTable con condizioni di join aggiuntive
Supponiamo dopo molti-a-molti modello di dati:
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
Ora supponiamo che voglio mappare tutti contratti relativi alla festa (unidirezionale). Esso può essere fatto utilizzando seguenti annotazioni in classe Party
entità:
@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;
che è bene.
Ma quello che sto cercando è come mappare i contratti con il ruolo particolare ?
@OneToMany
@??? ("ROLE = 'SIGNER' ")
private List<Contract> signedContracts;
Tecnicamente sto cercando un modo per aggiungere condizioni supplementari in JOIN.
finora trovato seguendo le idee in argomenti simili:
- mappa join tabella come entità separata, e eseguire il filtraggio in base al ruolo utilizzando query personalizzate;
- Hibernate ha l'annotazione @JoinFormula, ma non c'è modo di applicarlo all'interno di @JoinTable;
- Hibernate ha anche l'annotazione @Where, ma aggiunge la condizione per la tabella del contratto non per la tabella di join;
- utilizza @MapKeyColumn e restituisce Mappa anziché Elenco, ma posso avere più contratti per un ruolo;
- creare una vista sul lato DB (questo funziona davvero :)
Grazie!
Grazie mille, funziona come un fascino! – Vitaljok
Grazie per le idee. Ho anche avuto questa domanda, ma dal punto di vista di tale: Come posso chiamare tutte le parti, in modo da avere un elenco di contratti corrispondenti a un ruolo = 'firmatario'? Posso usare una query per fare questo? Quesito JPA che è? –
correlati: '@ JoinFormula' – Blauhirn