2009-09-09 8 views
1

Y at-il une configuration Hibernate (j'espère une annotation sur un champ @Column mappé de classes) qui me permettrait de trier une collection d'entités associées à l'entité chargée par une colonne donnée de cette entité. load (Entity.class, Id) est appelé? Par exemple si j'avais un EntityA qui contenait une association OneToMany à un EntityB. Je souhaite que EntityB soit trié dans l'ensemble renvoyé par Hibernate.Configuration de la colonne de tri de l'entité Hibernate

Répondre

8

session.load() charge une instance d'entité unique. Aucun tri n'est impliqué.

Mise à jour (basé sur modifier question):

@OrderBy("column_name") peut être utilisé pour trier les éléments de collecte au sein de l'entité par colonne donnée; mais qui n'a de sens que pour les collections qui maintiennent leur ordre (par exemple la liste, non défini):

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY) 
@OrderBy("name") 
private List<EntityB> headlines = new ArrayList<Entity>(); 
+0

je SortedSet et utilisé l'annotation @Sort (mais quelqu'un sur stackoverflow pensé que c'était une mauvaise réponse, toute idée pourquoi?) – Dougnukem

+1

@Dougnukem je me rends compte c'est un vieux post mais en espérant que ceci aide quelqu'un d'autre: '@ Sort' est une 'mauvaise' idée parce que la commande arrive s sur le serveur d'applications. Avec '@ OrderBy', la liste est triée sur le serveur de base de données. Généralement, il est préférable de laisser la base de données gérer le tri, car c'est l'un de ses points forts. – egallardo

0

Non, vous pouvez sélectionner la commande uniquement au niveau de la collection (@OrderBy) ou throug hql ou critères api. Session.load ne charge pas une liste, seulement un seul objet.

1

Vous pouvez trier une liste d'entités lorsque vous les extrayez de la base de données en utilisant la méthode addOrder() sur les critères.

Si vous avez une classe parente avec une liste des enfants, vous pouvez commander les enfants avec l'annotation @OrderBy (voir Hibernate Annotations - Collections

1

je @Sort et une collection SortedSet pour cartographier mon association qui exigeait que mon entité mettre en œuvre une interface comparable (int compareTo (méthode T)).

@OneToMany(cascade=CascadeType.ALL, fetch=FetchType.LAZY) 
@Sort(type=SortType.NATURAL)  
private SortedSet<Entity> headlines = new TreeSet<Entity>(); 
+0

une raison pour laquelle c'est une mauvaise solution? – Dougnukem

+0

Si 'headlines' est créé en mémoire, ce n'est pas une mauvaise solution. Chaque scénario est différent mais, en général, s'il est chargé à partir d'une base de données, vous voudriez laisser la base de données faire le tri pour vous pour des raisons de performances. – egallardo

Questions connexes