2010-09-21 13 views
7

Si tengo una anotación @OrderBy ("someProperty") en un objeto y luego usar un criterio para añadir una cláusula ORDER BY, así:¿Es posible eliminar el pedido de los criterios de Hibernate?

criteria.addOrder(Order.asc("id")); 

El SQL resultante hará el pedido de esta manera:

ORDER BY someProperty, id asc 

¿Es posible cambiar el orden de las dos o eliminar la orden someProperty? No puedo eliminar la anotación @OrderBy y estoy usando Hibernate para Java.

+0

Tengo la misma pregunta ... estamos usando Hibernate 3.2.6 ... me encantaría la posibilidad de 'anular' la anotación @OrderBy cuando use proyecciones. ¿Alguien sabe sobre esto? ¿Hay alguna manera de cambiarlo sobre la marcha? ¿Cambia el orden de los pedidos o elimina la cláusula @OrderBy? Gracias! –

+0

Tengo el mismo problema con Hibernate 3.6.4, que he reducido a la implementación (con errores) de org.hibernate.loader.JoinWalker # orderBy (asociaciones de listas finales, orden de cadenas finalBy) en la línea 820. I cree que hay un error en esta línea, ya que OrderBy en las asociaciones se está fusionando antes del pedido especificado en los Criterios. Piénselo: si he especificado un pedido deseado en un Criterio que tenga Elementos como la entidad raíz, ¿Hibernate realmente debería colocar primero el OrderBy especificado en las Ofertas asociadas? –

Respuesta

1

Criteria no tiene métodos para la eliminación de Order ni Criterion Order clase es muy limitado, sólo se puede utilizar nombres de propiedades y genera SQL estándar y portátil. La anotación de OrderBy es una orden de SQL, como javadoc dice: OrderBy Eso significa que puede utilizar allí cualquier sql (incluso uno exclusivo de su proveedor de bases de datos). Eche un vistazo a este artículo: Sorting Collections in Hibernate Using SQL in @OrderBy

Añadir un fragmento de SQL a su clase de dominio no es necesariamente lo más elegante del mundo, pero podría ser lo más pragmático.

1

Puede ser posible eliminar un pedido particular a través del iterador criteria.iterateOrderings(), pero no estoy seguro de cómo funciona con las anotaciones.

Cuestiones relacionadas