2009-01-02 13 views
5

Así que si mi consulta JPA es así: Seleccionar distinta p de Padres p izquierda unirse a ir a buscar el fin p.children por p.somePropertyOrden retorno de objetos secundarios en consulta JPA

I correctamente obtener resultados ordenados por la espalda p .someProperty, y obtengo mi colección de p.children correctamente cargada y con ansias. Pero me gustaría que mi consulta sea algo así como "ordene por p.someProperty, p.children.someChildProperty" para que la colección poblada dentro de cada objeto principal sea sub-ordenada por someChildProperty.

Esto parece intuitivo cuando pienso en términos del sql que en realidad se genera para estas llamadas, pero creo que lo es menos cuando intenta volver a trazar los objetos jerárquicos.

Respuesta

13

Para conservar la orden, use TreeSet. Por lo que respecta a la clasificación de una colección dentro del padre, solo hágalo en su código usando Comparator.

Bueno, intente esto en la definición de su colección en la clase de entidad padre. Espero que entiendas mi punto.

Puede utilizar esta anotación JPA,

@javax.persistence.OrderBy(value = "fieldName") 

o esta Hibernate específica,

@org.hibernate.annotations.OrderBy(clause = "FIELD_NAME asc") 

y también se puede usar esto,

@org.hibernate.annotations.Sort(type = SortType.NATURAL) 

o

@org.hibernate.annotations.Sort(type = SortType.COMPARATOR) 

En el caso del comparador, un comparador debe estar en su lugar. Otro solo podría funcionar con colecciones de cadenas.

+0

como una alternativa genérica puede usar la anotación javax: @ javax.persistence.OrderBy (value = "fieldName") –

+0

@James: Gracias amigo, actualizado. –

1

Adeel básicamente tiene esto clavado. También puede usar aquellos con una lista que podría ser importante si sus colecciones contienen la misma entidad más de una vez.

Cuestiones relacionadas