2011-02-22 4 views
8

Tengo un objeto Foo con una lista de barras. ¿Hay alguna manera de configurar mi clase para que getBars() devuelva una lista que se haya ordenado con Collections.sort? En otras palabras, me gustaría ejecutar Collections.sort cuando la lista se rellena por primera vez. Actualmente, llamo a sort cuando recupero la colección, que puede ser redundante y se olvida fácilmente.Ordenar la recopilación de hibernación al recuperar de la base de datos

Respuesta

24

¿Está utilizando asignaciones de estilo J2EE con archivos Hibernate XML, o está utilizando JavaBeans con anotación JPA?

Si está utilizando JPA, puede usar la anotación @OrderBy para dejar que la base de datos ordene la colección por usted. También puede usar @Sort para hacerlo en Java.

Por último, si está escribiendo HQL, por ejemplo, en un @NamedQuery, puede usar la cláusula ORDER BY.

¡Muchas formas de hacerlo!

7

Creo que si anotar la propiedad con @Sort que se clasifican automáticamente

También tiene la opción de especificar una clase personalizada Comparator:

@Sort(comparator=MyComparator.class, type=SortType.COMPARATOR) 

Referencia:

+0

Solo un encabezado la anotación '@ Sort' ha quedado en desuso, un ejemplo actualizado se vería así:' @SortComparator (MyComparator.class) '. –

+0

@JasonSperske ¿por qué no agregas una respuesta con eso? –

3

la salida de los documentos de hibernación en colecciones ordenadas

http://docs.jboss.org/hibernate/core/3.6/reference/en-US/html/collections.html#collections-sorted.

También puede poner otro método en su DAO que use hql para recuperar los elementos secundarios, que puede ordenar a través de hql.

Si el procedimiento de clasificación no se basa en una sola columna, no creo que tenga otra opción que hacer la clasificación usted mismo. Puede agregar la lógica a su modelo de dominio ...

0

Ordenar la lista cuando selecciona de la base de datos sería una mejor opción (déjalo ordenar) en lugar de ordenarla después de seleccionarla.

+0

Claro, pero no es una opción cuando quiere ordenar una colección de una consulta Criteria. – schmmd

+0

¿Está fusionando diferentes resultados de búsqueda en uno y luego ordenando lo que tiene? – fmucar

3

Si está utilizando la configuración de XML, se puede establecer order-by atributo: -

<class name="Foo" table="Foo"> 
    ... 

    <set name="bars" inverse="true" order-by="barName"> 
     <key column="fooId" /> 
     <one-to-many class="Bar" /> 
    </set> 
</class> 

De esta manera, cuando se invoca foo.getBars(), obtendrá Bar objetos ordenados por nombre de la barra, en este ejemplo.

Cuestiones relacionadas