2

私は 3 つのクラスを持っています: 1 番目、2 番目、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」が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

ただし、(distinct、join、order by) を同じレベルにすることはできないため、SQL リクエストは実行できません。SQL開発者でランチします。(distinct、join、order by) のいずれも使用しないこの要求は正常に機能します。これで何ができますか。「異なるSELECT」レベルで休止状態に(結合、個別)および(順序)を強制することはできますか?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 に答える