How do I sort an hibernate object array to properties of composite object (pe persons with an address than sort by city). Finally I found the hibernate criteria- and order object which solve this problem in a very nice way.


Die Hibernate Integration in CF9 ist wirklich ein Meilenstein. Objektorientierte Programmierung macht mit einer Pesistenzschicht bzw. einem Data Mapper zu relationalen Datenbanken erst richtig Spass. Dabei tauchen natürlich auch neue Fragestellungen auf. Notabene zu oberflächlich einfachen Tasks wie: das zurückgespielte Array von Objekten einer Hibernate-Abfrage zu sortieren:

Bei einfachen Objekten ist es dank dem CF-Wrapper lediglich ein Argument zum Sortieren zu übergeben. Auch bei Composite Objekten kann damit einfach nach einem Property des Parent-Objekt sortiert werden. Im Beispiel: eine Personen-Entity, deren ORM-Abfrage nach Nachnamen sortiert wird.

Das Personen-Objekt ist ein Composite mit einem Address-Objekt. Hier in einer einfachen 0ne-to-One Relation. Die Diskussion, wie sinnvoll 'One-to-One' Realtionen sind, lasse ich jetzt mal aussen vor. 

Gerne würde man jetzt die Person nach der Stadt im Address-Objekt  sortieren. Direkt geht das aber nicht. Hibernate bietet dazu jedoch die "query-criterias" an. Ein sehr mächtiges Feature, das sich lohnt eingehender zu studieren. http://docs.jboss.org/hibernate/core/3.3/reference/en/html/querycriteria.html .

Um nun die Person nach der Stadt zu sortieren, erzeugt man eine Hibernate Order-Objekt und fügt der Hibernatesession eine 'Criteria' hinzu. Wobei das "Criteria"-Objekt mit einer weiteren "Criteria" für Child-objekt 'Addresse' ergänzt wird. Die fertige Abfrage mit Sortierung nach Städten sieht dann so aus: