Ich habe einige Stunden damit verbracht, herumzusuchen und habe nichts gefunden, was meinem Fall ähnlich ist.JPA @JoinTable mit zusätzlichen Join-Bedingungen
Lassen Sie uns folgende many-to-many-Datenmodell übernehmen:
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
Nun nehmen wir an, ich alle Verträge im Zusammenhang mit Partei (unidirektional) zuordnen möchten.
@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;
Das ist in Ordnung: Es kann mit folgenden Anmerkungen in Party
Entitätsklasse erfolgen.
Aber was ich suche ist, wie Verträge mit besondere Rolle zuordnen?
@OneToMany
@??? ("ROLE = 'SIGNER' ")
private List<Contract> signedContracts;
Technisch Ich bin auf der Suche nach einem Weg, zusätzliche Bedingung in JOIN-Anweisung hinzuzufügen.
Bisher folgende Ideen in ähnlichen Themen gefunden:
- Kartentabelle als separate Einheit verbinden, und führen Sie das Filtern nach Rolle mithilfe von benutzerdefinierten Abfragen;
- Hibernate hat @JoinFormula Annotation, aber keine Möglichkeit, es in @JoinTable anzuwenden;
- Hibernate hat auch @Where Annotation, aber es fügt Bedingung für Contract-Tabelle nicht für Join-Tabelle hinzu;
- @ MapKeyColumn verwenden und Karte anstelle von Liste zurückgeben, aber ich kann mehrere Verträge pro Rolle haben;
- einen Blick auf DB Seite erstellen (diese funktioniert in der Tat :)
Dank!
Vielen Dank, arbeitet als ein Charme! – Vitaljok
Danke für die Ideen. Ich hatte auch diese Frage, aber aus der Sicht von solchen: Wie rufe ich alle Parteien, so dass eine Liste von Verträgen entsprechend einer Rolle = "Unterzeichner" haben? Kann ich dazu eine Abfrage verwenden? JPA-Abfrage, die ist? –
verwandt: '@ JoinFormula' – Blauhirn