У меня довольно сложная модель данных и, следовательно, довольно сложный запрос (с использованием API критериев):
Это мои критерии:
Criteria criteria = getSession().createCriteria(MyClass.class);
criteria.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(Restrictions.eq("issuer.id", issuerCompanyId));
criteria.addOrder(Order.desc("product.id"));
criteria.setFirstResult(pagingParams.getDisplayStart())
.setMaxResults(pagingParams.getDisplayLength());
List<MyClass> result = criteria.list()
Ничего больше, ничего не пропущено.
Если я сейчас посмотрю на сгенерированный SQL (довольно громоздкий оператор), он заканчивается так:
...and this_.issuer_id=? order by underlying12_.ric asc, this_.product_id desc
И вот моя проблема: порядок от базового12_.ric asc совершенно нежелателен и, конечно, приводит к неправильному порядку моего результата.
У меня нет абсолютно никакой подсказки, откуда исходит утверждение и как я могу от него избавиться. Любая помощь приветствуется: -)
Обновление: Найден оператор order by
в моем собственном коде. Этот вопрос, безусловно, можно закрыть.