Ich habe ein ziemlich komplexes Kriterium, mit dem ich serverseitige Daten abrufen, sortieren und anzeigen kann. Ich abgespeckte den folgenden Auszug:Hibernate Criteria API - Zugriff auf verknüpfte Eigenschaften
// create criteria over a bunch of tables...
Criteria testCriteria = getSession().createCriteria(PriceRequest.class)
.setResultTransformer(CriteriaSpecification.DISTINCT_ROOT_ENTITY)
.setFetchMode("pricedBy", FetchMode.JOIN)
.setFetchMode("canceledBy", FetchMode.JOIN)
.setFetchMode("product", FetchMode.JOIN)
.setFetchMode("product.underlyings", FetchMode.JOIN)
.setFetchMode("product.tradedBy", FetchMode.JOIN)
.setFetchMode("product.requestedBy", FetchMode.JOIN)
.setFetchMode("fileUploads", FetchMode.JOIN);
// add various filter fields (only if required in real code)...
Criteria subCriteria = testCriteria
.createCriteria("product", JoinFragment.LEFT_OUTER_JOIN)
.setFetchMode("underlyings", FetchMode.JOIN)
.add(Restrictions.ge("maturityDate", new Date()));
testCriteria.addOrder(Order.desc("product.id")); // (1)
testCriteria.addOrder(Order.desc("product.maturityDate")); // (2)
List list = testCriteria.list();
Statement (1) läuft gut, Aussage (2) mit folgenden Ausnahme endet:
SCHWERE: Servlet.service() für Servlet Rest warf Ausnahme org.hibernate.QueryException: kann nicht Eigentum beheben: product.maturityDate von: com.my.model.PriceRequest
ich nehme „maturityDate“ als Beispiel, aber ich habe diese Fragen mit allen Produkten Eigenschaften außer "product.id".
Ich habe auch versucht, einen Alias für Produkt ("prod") hinzuzufügen. Dies ermöglicht eine Sortierung nach dem Fälligkeitsdatum ("prod.maturityDate"), scheitert jedoch daran, die Einschränkung zu Teilkriterien hinzuzufügen.
Ich haben so viel keine Ahnung, was falsch läuft ...
Ist die Eigenschaft ** maturityDate ** in ** Produkt ** vorhanden? – ManuPK
absolut. Siehe mein Update im Text. –