2009-07-09 15 views
8

Ich habe das folgende Problem. Ich habe drei Klassen, A, B und C. A enthält eine OneToMany relatierte Liste von B: s. B enthält eine ManyToOne-Beziehung zu C. C enthält ein Feld namens "name" und B enthält auch ein Feld namens "name". Was ich erreichen möchte, ist, dass die Einträge in der Liste von A in erster Linie nach dem Namen von C und in zweiter Linie nach dem Namen von B sortiert sind - das Problem ist, dass ich nicht weiß, wie ich das machen soll. Ist es überhaupt möglich?Definieren der Reihenfolge einer Liste

Ich benutze EclipseLink als mein JPA-Anbieter.


class A { 
    @OneToMany 
    @OrderBy("b.c.name, b.name") <---- this is the problem 
    List<B> b; 
} 

class B { 
    @ManyToOne 
    C c; 
    String name; 
} 

class C { 
    String name; 
} 

EDIT Ja, ich habe verschiedene Varianten ausprobiert, zum Beispiel @OrderBy („c.name“) nicht funktioniert, bekomme ich nur eine Fehlermeldung mir zu sagen, dass die Einheit der Klasse B nicht enthält ein Feld namens "c.name".

Antwort

9

Es ist NICHT möglich. @OrderBy akzeptiert nur direkte Eigenschaften-/Feldnamen, keine verschachtelten Eigenschaften. Was wirklich Sinn macht, weil die "c" -Tabelle - abhängig von Ihrer Abrufstrategie - nicht einmal Teil einer Auswahl sein kann, die ausgegeben wird, um Ihre "b" s abzurufen.

0

Haben Sie versucht @OrderBy("c.name", "name")?

Sie sollten nicht "b." weil es impliziert wird, dass @OrderBy für Spalten der Instanzen von B auf dem b-Array ausgeführt wird.

0

Haben Sie versucht:

@OrderBy("c.name ASC", "name ASC") 

?

2

ChssPly76 ist richtig.

Was Sie tun können, ist eine benannte Abfrage wie diese zu erstellen:

SELECT b 
FROM B b 
WHERE b.a = :mya 
ORDER BY b.c.name 
Verwandte Themen