2009-06-24 11 views
6

tengo una clase dice: "claseA", que tiene una colección de "ClassB"Hibernate @OrderBy con la clase referenciada

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

"ClassB" tiene una clase mapeada "ClassC" las anotaciones de mapeo llanura de edad:

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

¿Cómo puedo añadir una anotación @OrderBy a la colección de claseA a ClassB, por lo que se ordenó la colección por la propiedad "nombre" del ClassC

así:

@OrderBy(clause="classC.name asc") 

Todo lo que tengo son excepciones de Oracle que dicen que classC es desconocido.

Cualquier ayuda aquí sería increíble, ya que realmente me está molestando en este momento.

P.S. También debería mencionar que al usar la anotación OrderBy en la colección como esta: @OrderBy (cláusula = "classC asc") (es decir, sin .name en la clase C) obtengo una instrucción SQL válida, que utiliza la columna ID (la clave principal) de classC para ordenar por.

Saludos, Marcar

+0

Según lo sugerido por Jiří Vypědřík se puede implementar la interfaz java.util.Comparator. En el método de comparación implementado puede implementar la lógica para hacer referencia al objeto Hibernate asignado sin problema y devolver el valor int en consecuencia. Sin embargo, esto no utilizará el orden en Oracle DB, sino en la clasificación en memoria (JVM) en su lugar. – prageeth

Respuesta

7

Desafortunadamente es imposible hacer lo que quieras. He respondido una pregunta similar here.

@OrderBy solo admite directo propiedades de los elementos de la colección.

-1

Sólo sé NHibernate (versión .NET), pero supongo que debería funcionar similar:

@OrderBy(clause = "name asc") 

o puede probar esto:

@OrderBy("name") 
+0

Pero esa sería la propiedad 'nombre' de ClassB, necesito el nombre propiedad de ClassC – Mark

1

Esto es posible si usa JPA. Vea esto article.

A continuación, sólo añadir @OrderBy("name") a la propiedad de colección

3

uso @Sort con el comparador personalizado en lugar

Cuestiones relacionadas