Ich verwende JPA 2.0 Kriterien Builder. Ich brauche Daten von einer Tabelle und sortiere sie nach Spalten von anderen. Diese Tabellen haben Beziehungen OneToMany:Wie ersetzen Sie native Reihenfolge durch Klausel auf JPA-Äquivalent?
class Club{
@OneToMany(mappedBy = "club")
private List<Address> addresses;
...
}
class Address{
@JoinColumn(name = "club_id", referencedColumnName = "id")
@ManyToOne(fetch = FetchType.LAZY)
private Club club;
@Column(name = "type")
private Long type;
@Column(name = "full_address")
private String full_address;
...
}
mehr Adressen von irgendeiner Art sein, aber ich brauche nur eine Zeile dieser spezifischen Adresse.
Ich schreibe native Abfragen mit Unterabfrage, aber es hat ein Problem, weil Unterabfrage nicht in Reihenfolge Klausel und in Select-Klausel in JPA 2.0 verwendet.
select c.full_name from club c
ORDER BY (select a.full_address from address a WHERE c.id= a.club_id and a.type=1 LIMIT 1)
select c.full_name, (select a.full_address from address a WHERE a.type=1 AND c.id=a.club_id LIMIT 1) as full_address FROM club c
ORDER BY fullAddress;
Wie kann ich native Reihenfolge durch Klausel auf JPA Äquivalent ersetzen?
Danke!
Gibt es nicht eine Möglichkeit, ein Club in viele Adressen ersetzen und erhält platziert wird die Reihenfolge nicht deterministisch? Anderenfalls kann Ihr JPA-Anbieter Ihnen erlauben, die Unterabfrage in der from-Klausel wie eine Tabelle zu verwenden. Aber es wäre wahrscheinlich besser, wenn Sie die Abfrage modifizieren, um Ihnen das zu geben, was Sie wollen - vermutlich ein eindeutiger vollständiger Name, geordnet nach Adresse. Etwas wie "Wählen Sie c.full_name von Club c verbinden c.addresses a wo a.type = 1 Reihenfolge von a.full_address" – Chris
Vielen Dank für Ihre Antwort. Ein Club kann aus mehreren Adressen mit Typ 1 bestehen. Bei Verwendung von 'join' erscheinen die Dubletten des Clubs. Ich brauche alle Club (falls vorhanden, Adresse mit Typ 1 oder Nein) und sortiere es. – Jun
Fügen Sie ein eindeutiges Schlüsselwort hinzu, aber wenn Typ 1 nicht eindeutig ist, verstehe ich nicht ganz, wie Sie die nicht eindeutigen Adressen auch mit einer Unterabfrage sortieren können. – Chris