2009-06-24 8 views
6

J'ai une classe dit: "ClassA" qui a une collection de "ClassB"Mise en veille prolongée @OrderBy avec classe référencée

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

"ClassB" a une classe mappée "ClassC" avec annotations cartographiques pures et simples:

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

Comment puis-je ajouter une annotation @OrderBy à la collection de ClassA à ClassB, de sorte que la collection est ordonnée par la propriété « nom » de ClassC

comme ceci:Tout ce que j'obtiens, ce sont les exceptions Oracle qui disent que la classe C est inconnue.

Toute aide ici serait géniale, car elle m'embête vraiment pour le moment.

P.S. Je devrais aussi mentionner que l'utilisation de l'annotation OrderBy sur la collection comme ceci: @OrderBy (clause = "classC asc") (ie sans le .name sur classC) Je reçois une instruction SQL valide, qui utilise la colonne ID (le clé primaire) de classC à commander par.

Cheers, Mark

+0

Comme suggéré par Jiří Vypědřík vous pouvez implémenter l'interface java.util.Comparator. Dans la méthode de comparaison implémentée, vous pouvez implémenter la logique pour faire référence à l'objet Hibernate Mapped sans problème et renvoyer la valeur int en conséquence. Cependant, ceci n'utilisera pas la commande sur la base de données Oracle mais le tri en mémoire (JVM) à la place. – prageeth

Répondre

7

Il est malheureusement impossible de faire ce que vous voulez. J'ai répondu à une question similaire here.

@OrderBy ne prend en charge que direct propriétés des éléments de collection.

-1

Je sais que NHibernate (version .NET), mais je suppose que cela devrait fonctionner même:

@OrderBy(clause = "name asc") 

Ou vous pouvez essayer ceci:

@OrderBy("name") 
+0

Mais ce serait la propriété 'name' de ClassB, j'ai besoin de la propriété name de ClassC – Mark

1

Ceci est possible si vous utilisez JPA. Voir ceci article.

Ensuite, vous ajoutez juste @OrderBy("name") à la propriété collection

3

utilisation @Sort avec comparateur personnalisé au lieu

Questions connexes