从一个级别Hibernate createCriteria JOIN,ORDER,DISTINCT

时间:2012-10-22 15:18:15

标签: hibernate grails createcriteria

我有3个班级:第一,第二,第三 我的createria大概是这样的:

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

(当“if”为false时,createCriteria正常工作)

当“if”为真时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请求无法执行,因为(distinct,join,order by)不能在同一级别上执行。 我在SQL开发人员中吃午饭。没有(distinct,join,order by)之一的请求工作正常。 我该怎么办? 我可以在“不同的SELECT”级别强制执行hibernate do(join,distinct)和(order)吗? 我如何用另一个SELECT包装SELECT?

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

1 个答案:

答案 0 :(得分:0)

您可以尝试使用Groovy.SQL。*,这比HQL查询提供了更多的灵活性。

试试这个:http://groovy.codehaus.org/Tutorial+6+-+Groovy+SQL