2

我有 3 个课程:第一,第二,第三我有大约像这样的 createria:

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

(当“如果”为假时,createCriteria 工作正常)

当 "if" true 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 包装 SELECT?

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

1 回答 1

0

你可以试试 Groovy.SQL.*,它比 HQL 查询更灵活。

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

于 2013-04-10T21:56:51.437 回答