2010-09-21 4 views
7

Se ho un'annotazione @OrderBy ("someProperty") su un oggetto e quindi utilizzare un criterio per aggiungere una clausola ORDER BY in questo modo:È possibile rimuovere l'ordine dai criteri di sospensione?

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

Lo SQL risultante farà l'ordine in questo modo:

ORDER BY someProperty, id asc 

È possibile modificare l'ordine dei due o rimuovere l'ordine SomeProperty? Non riesco a rimuovere l'annotazione @OrderBy e sto utilizzando Hibernate per Java.

+0

Ho questa stessa domanda ... stiamo usando Hibernate 3.2.6 ... piacerebbe la possibilità di "sovrascrivere" l'annotazione @OrderBy quando si usano le proiezioni. Qualcuno lo sa? C'è un modo per cambiarlo al volo? Modificare l'ordine degli ordini o rimuovere la clausola @OrderBy tutti insieme? Grazie! –

+0

Sto riscontrando lo stesso problema con Hibernate 3.6.4, che ho ristretto all'attuazione (con bug) di org.hibernate.loader.JoinWalker # orderBy (associazioni di elenchi finali, stringa finale orderBy) sulla riga 820. I crediamo che ci sia un bug su questa linea, poiché l'OrderBy sulle associazioni viene unito prima dell'ordine specificato nei Criteri. Pensateci: se ho specificato un ordinamento desiderato in un criterio con articoli come entità radice, Hibernate dovrebbe davvero posizionare l'OrderBy specificato prima sulle offerte associate? –

risposta

1

Criteria non ci sono metodi per la rimozione di OrderCriterion Order classe è molto limitata, è possibile utilizzare solo i nomi di proprietà e genera SQL standard e portatile. OrderBy annotation è un ordine SQL, come afferma javadoc: OrderBy Ciò significa che è possibile utilizzare qualsiasi sql (anche esclusivo del proprio fornitore di database). Date un'occhiata a questi articoli: Sorting Collections in Hibernate Using SQL in @OrderBy

L'aggiunta di un frammento SQL nella classe del dominio non è necessariamente la cosa più elegante del mondo, ma potrebbe essere la cosa più pragmatica.

1

Potrebbe essere possibile rimuovere un ordine particolare tramite criteri.iterateOrderings() iteratore, ma non sono sicuro di come funzioni con le annotazioni.