У меня довольно сложные критерии, которые я использую для извлечения, сортировки и просмотра данных на стороне сервера.Я сократил следующую выдержку:
// 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();
Оператор (1) работает нормально, оператор (2) заканчивается следующим исключением:
SEVERE: Servlet.service () дляостальные сервлеты сгенерировали исключение org.hibernate.QueryException: не удалось разрешить свойство: product.maturityDate of: com.my.model.PriceRequest
Я выбрал "maturityDate" в качестве примера, но у меняэто относится ко всем свойствам продукта, кроме "product.id".
Я также попытался добавить псевдоним для продукта ("prod").Это позволяет сортировать по дате погашения («prod.maturityDate»), но не удается добавить ограничение к подкритериям.
Я так сильно не понимаю, что происходит ...