Hibernate createCriteria ПРИСОЕДИНЯЙТЕСЬ, ЗАКАЗАТЬ, ОТЛИЧИТЬ от одного уровня

У меня есть 3 класса: первый, второй, третий. У меня есть примерно такие креатории:

First.createCriteria().listDistinct {
            if(....){fetchMode("second", FetchMode.JOIN)
            fetchMode("second.third", FetchMode.JOIN)}
            order(sortOrder, orderBy)
            order("id", "desc")
}

(когда "если" false, createCriteria работает нормально)

когда "если" правда Hibernate генерирует SQL-запрос, как это

select 
  distinct id,
  secondfield
from
  FIRST as firsts
inner join
  SECOND
       ... on ...
inner join
  THIRD
       ... on ...
where(...)
order by 
     firsts.name asc
     firsts.id desc

Но поэтому SQL-запрос не может быть выполнен, потому что (Different, Join, Order by) не может быть на одном уровне вместе. Я обедаю в SQL-разработчике. Этот запрос без одного из (отдельный, объединить, упорядочить) работает нормально. Что я могу сделать с этим. Могу ли я заставить Hibernate сделать (присоединиться, отличаться) и (порядок) в "разные уровни SELECT"? Как я могу обернуть SELECT другим SELECT?

select *
from 
   (select 
     distinct id,
     secondfield
   from
     FIRST as firsts
   inner join
     SECOND
          ... on ...
   where(......))
order by
    (......)

1 ответ

Вы можете попробовать Groovy.SQL.*, Который обеспечивает большую гибкость, чем запросы HQL.

Попробуйте это: http://groovy.codehaus.org/Tutorial+6+-+Groovy+SQL

Другие вопросы по тегам