Criteria-API - Hibernate генерирует нежелательный порядок по выражению - PullRequest
1 голос
/ 24 марта 2012

У меня довольно сложная модель данных и, следовательно, довольно сложный запрос (с использованием 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 в моем собственном коде. Этот вопрос, безусловно, можно закрыть.

1 Ответ

2 голосов
/ 24 марта 2012

Мой плохой. Только что обнаружил это отображение от продукта к основному:

@ OrderBy (значение = "РИК")
частный Set underlyings = новый HashSet ();

...