Скажем, у меня есть сущность MyEntity
, и у нее есть свойство на основе формулы fmlaProp
. Теперь скажите, что я создаю критерии:
s.createCriteria(MyEntity.class)
.setProjection(
Projections.distinct(
Projections.property("fmlaProp")))
.addOrder(Order.asc("fmlaProp"));
в этом случае я получаю следующий SQL:
SELECT DISTINCT fmlaProp-sql FROM MY_ENTITY_TABLE ORDER BY fmlaProp-sql
Что дает ошибку в Oracle, говоря, что выражение order-by не выбрано. Тогда я попробовал следующие критерии:
s.createCriteria(MyEntity.class)
.setProjection(
Projections.distinct(
Projections.alias(
Projections.property("fmlaProp"),
"alias1"))
.addOrder(Order.asc("alias1"));
Который генерирует "order by alias1", который отлично работает. Но это отчасти уродливо - код должен «знать» те свойства формулы, что нарушает принцип «написать один раз». Есть мысли или предложения по этому поводу? Заранее спасибо.