Ho una classe dire: "ClassA", che ha una collezione di "ClassB"Hibernate @OrderBy con classe di riferimento
@OneToMany(cascade = CascadeType.ALL, fetch = FetchType.LAZY)
@JoinColumn(name = "COLUMN_NAME")
private List<ClassB> lotsOfClasses;
"ClassB" ha una classe mappata "ClassC" utilizzando semplici annotazioni di mappatura vecchi:
public class ClassB {
...
@ManyToOne
@JoinColumn(name="AD_POINT_ID")
private ClassC classC;
...
}
Come faccio ad aggiungere un'annotazione @OrderBy alla collezione di ClassA a ClassB, in modo che la raccolta è ordinata dal "nome" di proprietà di ClassC
Come così:
@OrderBy(clause="classC.name asc")
Tutto ciò che ottengo sono eccezioni Oracle che dicono che classC è sconosciuto.
Qualsiasi aiuto qui sarebbe fantastico, dato che mi disturba molto al momento.
P.S. Dovrei anche menzionare che usando l'annotazione OrderBy sulla collezione in questo modo: @OrderBy (clausola = "classC asc") (cioè senza il .name su classC) Ottengo un'istruzione SQL valida, che utilizza la colonna ID (la chiave primaria) di classC su cui ordinare.
Cheers, Segna
Come suggerito da Jiří Vypědřík è possibile implementare l'interfaccia java.util.Comparator. Nel metodo di confronto implementato è possibile implementare la logica per fare riferimento all'oggetto Hibernate Mapped senza problemi e restituire il valore int di conseguenza. Tuttavia, questo non utilizzerà l'ordinamento sul DB Oracle ma l'ordinamento in-memory (JVM). – prageeth