2009-07-09 8 views
8

Tengo el siguiente problema. Tengo tres clases, A, B y C. A contiene una lista de OneToMany relationed de B: s. B contiene una relación ManyToOne con C. C contiene un campo llamado "nombre" y B también contiene un campo llamado "nombre". Lo que me gustaría lograr es tener los elementos en la lista de A ordenados principalmente por el nombre de C y, en segundo lugar, por el nombre de B; el problema es que no sé cómo hacerlo. ¿Es posible?Definir el orden de una lista

Estoy usando EclipseLink como mi proveedor de JPA.


class A { 
    @OneToMany 
    @OrderBy("b.c.name, b.name") <---- this is the problem 
    List<B> b; 
} 

class B { 
    @ManyToOne 
    C c; 
    String name; 
} 

class C { 
    String name; 
} 

EDITAR Sí, he probado diferentes variaciones, por ejemplo @OrderBy ("c.name") no funciona, acabo de recibir un mensaje de error que me dice que la clase de entidad B no contiene un campo llamado "c.name".

Respuesta

9

NO es posible. @OrderBy solo acepta nombres de propiedades/campos directos, no propiedades anidadas. Lo cual tiene sentido, en realidad, porque la tabla "c", dependiendo de su estrategia de búsqueda, puede no ser parte de una selección emitida para recuperar su "b".

0

¿Has probado @OrderBy("c.name", "name")?

No debe usar "b". porque está implícito que @OrderBy se hará en columnas de las instancias de B en la matriz b.

0

Ha intentado:

@OrderBy("c.name ASC", "name ASC") 

?

2

ChssPly76 tiene razón.

Lo que podría hacer es crear una consulta con nombre como éste:

SELECT b 
FROM B b 
WHERE b.a = :mya 
ORDER BY b.c.name 
Cuestiones relacionadas