2

私は休止状態 3.6.10.Final と MySQL 5.5 を使用しています。

次のような動的クエリを作成しました。

"from " + clazz.getName()+ " ORDER BY "+sortField+" "+sortDirection

私の休止状態のエンティティには、多対 1 の親子関係があります。クエリが親からのフィールドによって順序付けられている場合、hibernate は次の hql select を生成します。

select parent0_.ID as ID10_, parent0_.ID_CHILD as ID6_10_ 
from parent parent0_
order by parent0_.PARENTFIELD ASC

クエリが子からのフィールドによって並べ替えられている場合、次の hql があります。

select parent0_.ID as ID10_, parent0_.ID_CHILD as ID6_10_
from parent parent0_
cross join child1_
where parent0_.ID_CHILD = child1_.ID
order by child1_.CHILDFIELD ASC

2 番目のクエリは、parent0_.ID_CHILD が null になる可能性があるため、より少ない結果を返します。休止状態に強制的に左結合を生成させる方法はありますか?

私はこのようなものが必要です

select parent0_.ID as ID10_,
   parent0_.ID_CHILD as ID6_10_
from
parent parent0_
    left join
child child1_
on
parent0_.ID_CHILD = child1_.ID
order by child1_.CHILDFIELD ASC
4

1 に答える 1

2

JB Nizetのおかげで、私は次のようなクエリを書くことを解決しました。

String[] tokens = sortField.split("\\.");
for(int i=0;i<tokens.length-1;i++)
{
    sortby+=" LEFT JOIN parent"+i+"."+tokens[i]+" as child"+i;
}
sortby+=" ORDER BY child"+(tokens.length-2)+"."+tokens[tokens.length-1]+" "+sortDirection;
...
String query = "select parent0 FROM " + clazz.getName()+" as parent0 "+ sortby;
于 2013-03-13T08:48:11.453 に答える