Über die Criteria API von Hibernate lassen sich mittlerweile fast alle SQL-Queries wurderbar zusammenstellen. Nur hier und da gibt es ein paar Dinge, die schöner umgesetzt werden könnten.
Ich habe bspw. eine Criteria auf ein Entity welches wiederum verknüpfte Entities hat. Meine Sortierung möchte ich auf ein Property des verknüpften Entities legen. Von der Crietria API sind wir es eigentlich gewohnt, so vorzugehen:
1 2 | Criteria criteria = getCurrentSession().createCriteria(User.class); criteria.addOrder(Order.asc("usergroup.name")); |
Leider funktioniert dieser Code nicht, die Exception ist, das das Property “usergroup.name” nicht bekannt ist.
Um das Problem zu umgehen, muss man der Criteria explizit angeben, dass man auf das Entity “UserGroup” zugreifen möchte. Folgendes funktioniert demnach:
1 2 3 4 | Criteria criteria = getCurrentSession().createCriteria(User.class); Criteria subCrit = criteria.createCriteria(UserGroup.class); // Sortierung auf UserGroup.name subCrit.addOrder(Order.asc("name")); |
Dieser “Bug”, das eine solche Sortierung überhaupt noch nicht unterstützt wurde, gilt nur für die Version 2.1. Schade ist, dass weiterhin eine Subcriteria verwendet werden muss, um die Sortierung dann auf die darunterliegende Property ausführen zu können. Der Weg über die Punkt-Notation wäre wohl schöner und leichter.
Hoffentlich kommt das noch.

