2009-06-24 14 views
6

ich eine Klasse sagen: "Klasse A", die eine Sammlung von "ClassB" hatHibernate @OrderBy mit referenzierten Klasse

@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY) 
@JoinColumn(name = "COLUMN_NAME")  
private List<ClassB> lotsOfClasses; 

"ClassB" hat ein zugeordnetes Klasse "ClassC" Anmerkungen plain old Mapping:

public class ClassB { 
... 
    @ManyToOne 
    @JoinColumn(name="AD_POINT_ID") 
    private ClassC classC; 
... 
} 

Wie kann ich eine @OrderBy Anmerkung zu KlasseA Sammlung zu ClassB hinzufügen, so dass die Sammlung der „Name“ Eigenschaft ClassC bestellt

Wie so:

Alles, was ich bekomme, sind Oracle Ausnahmen, die sagen, dass classC ist unbekannt.

Jede Hilfe hier wäre toll, da es mich im Moment wirklich nervt.

P.S. Ich sollte auch erwähnen, dass die Verwendung der OrderBy Annotation auf der Sammlung wie folgt: @OrderBy (clause = "classC asc") (dh ohne die. Name auf Klasse C) Ich bekomme eine gültige SQL-Anweisung, die die ID-Spalte verwendet Primärschlüssel) von classC zur Bestellung von.

Cheers, Mark

+0

Wie von Jiří Vypědřík vorgeschlagen, dass Sie java.util.Comparator Schnittstelle implementieren können. In der implementierten Vergleichsmethode können Sie die Logik implementieren, um problemlos auf das Hibernate Mapped-Objekt zu verweisen, und den int-Wert entsprechend zurückgeben. Dies verwendet jedoch nicht die Sortierung auf der Oracle-Datenbank, sondern die In-Memory-Sortierung (JVM). – prageeth

Antwort

7

Es ist leider unmöglich zu tun, was Sie wollen. Ich habe eine ähnliche Frage here beantwortet.

@OrderBy unterstützt nur direkte Eigenschaften der Elemente der Sammlung.

-1

Ich weiß nur, NHibernate (.NET-Version), aber ich denke, es sollte ähnlich funktionieren:

@OrderBy(clause = "name asc") 

Oder Sie können dieses versuchen:

@OrderBy("name") 
+0

Aber das wäre die "Name" -Eigenschaft von ClassB, ich brauche die Namenseigenschaft von ClassC – Mark

1

Dies ist möglich, wenn Sie JPA verwenden. Siehe hierzu article.

Dann fügen Sie einfach @OrderBy("name") zur Sammlung Eigenschaft

3

Verwendung @Sort mit benutzerdefinierten Komparator anstelle

Verwandte Themen