# Hibernate: Comparator für order by ?



## byte (21. Nov 2007)

Hi,

gibt es eine Möglichkeit, die Ordnung des _order by_ in HQL z.B. durch Angabe eines Comparators zu beeinflussen? Ich möchte nach einem String-Attribut in einer anderen als der natürlichen String-Ordnung sortieren. Möchte ungern die Collection im Nachhinein sortieren.

Gruß byto


----------



## SlaterB (21. Nov 2007)

was immer im order by steht, das geht an die Datenbank,
die kann kein Java, ist programmiersprachenunabhängig, 
versteht dagegen SQL,
und Java-Code eines Comparators in SQL übersetzen ist auch noch nicht erfunden worden

es würde also in jedem Fall im Nachhinein sortiert werden,
ob das nun Hibernate macht oder du, was ist der Unterschied?
wenn dir der Aufwand des einen Befehls zu hoch ist, dann schreibe dir eine HilfsOperation oder einen Wrapper, der das transparant macht:

new ComQuery(Session, String queryString, Comparator c).list()
bzw.
Helper.getListSorted(Query query, Comparator c)

----

ach du bist ja byto, dann hätte ich vielleicht nicht so sehr den Babyton anschlagen sollen


----------



## SnooP (21. Nov 2007)

Ich würde mal behaupten: nein. Weil das HQL letztlich in SQL geparsed wird und es keine Möglichkeiten einer speziellen/flexiblen Sortierung via Datenbank gibt. Bei Criterions kann man auch nur ASC oder DESC wählen und ist auf den Typ in der DB angewiesen... hier musst du also mal mit Java sortieren


----------



## SlaterB (21. Nov 2007)

> und es keine Möglichkeiten einer speziellen/flexiblen Sortierung via Datenbank gibt

unterschätze nicht, was man alles mit decode-Umwandlung, Modulo, Addition, substring usw. basteln kann 
evtl. DB-abhängig (DECODE bei Oracle)


----------



## byte (21. Nov 2007)

Hm ok. Es wäre halt schön gewesen, wenns da eine automatisierte Lösung durch Hibernate geben würde. Ob am Ende die DB sortiert oder Hibernate in memory, is mir prinzipiell wurscht. Klar kann man das ganze auch händisch mit Comparatoren lösen, aber das ist halt lästig, da in meinem Fall der User die Sortierung ändert. Und ich kann mir schöneres vorstellen, als mehrere Comparatoren jeweils ASC und DESC dynamisch zu konkatenieren.


----------



## SnooP (21. Nov 2007)

SlaterB hat gesagt.:
			
		

> > und es keine Möglichkeiten einer speziellen/flexiblen Sortierung via Datenbank gibt
> 
> unterschätze nicht, was man alles mit decode-Umwandlung, Modulo, Addition, substring usw. basteln kann
> evtl. DB-abhängig (DECODE bei Oracle)



ja sicher ... aber das ist für mich kein Ordering à la Comparator  .. wäre natürlich ne Möglichkeit - je nachdem was da jetzt wie sortiert werden soll könnte ich mir ne coole View vorstellen die das alles konfigurierbar erledigt...

für die Comparator hatten wir auf unserer Schulung jüngst eine recht coole Lösung die da sehr generisch vorging... hab aber leider glaub ich den Sourcecode dazu nich mehr...


----------



## byte (21. Nov 2007)

Eine generische Lösung für das Problem würde mich auch interessieren. Habs jetzt frickelig gelöst, weil ich nur für eine Spalte einen spezifischen Comparator brauche. Falls Du den Kram noch findest, kannst du ja mal posten. Ansonsten muss ich wohl auf meine Schulung warten.


----------

