2009-05-15 19 views
13

私はHibernate 3.2を使用しており、条件を使ってクエリを構築しています。私は多対1の関連付けを追加して注文したいと思っていますが、どうやってそれができるのか分かりません。 Hibernateのクエリは、このように見て終わるだろう、私は推測する:アソシエーション別の休止状態

select t1.a, t1.b, t1.c, t2.dd, t2.ee 
from t1 
inner join t2 on t1.a = t2.aa 
order by t2.dd <-- need to add this 

私はcriteria.addOrder(「assnName.propertyName」)を試みたが、それは動作しません。私はそれが通常のプロパティのために行うことができることを知っています。何か不足していますか?

答えて

23

いいえ、答えが見つかりました。私は、私がうまくいくとは思っていないものを試しましたが、私の驚きにはそうしました。私はaddOrder()メソッドは、任意の関連基準に関する主な基準はなく上だけで使用可能だったという仮定をしていた

Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class); 
Criteria assnCrit = criteria.createCriteria("assnName"); 

assnCrit.addOrder(Order.asc("propertyName")); 

Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class); 

criteria.addOrder(Order.asc("assnName.propertyName")) 

が、どのような実際にいた働いていた:私はこれをしようとしていました。

14

私は同じ問題を持っていたし、それはまた次のように解決することができます:

Criteria criteria = super.getSession().createCriteria(WipDiscreteJob.class) 
    .createAlias("assnName","a") 
    .addOrder(Order.asc("a.propertyName")); 

createAliasはあなたが保つことができるようにあなたの元のエンティティ(この場合はWipDiscreteJob.class)に根差しあなたの基準を維持することができます必要な場合に備えて基準を作成します(たとえば、元のエンティティのプロパティで2番目の注文が必要な場合など)。

+1

このすべてを見ていた、ありがとう! '.createAlias(" assnName "、" assnName ")'を実行しても、HQLと同じ構文を保つことができます。 –

+0

@Abdullahお手伝いをしてうれしいです。 – Marcelo

+1

これは非常に役に立ちました。これを見つけるにはしばらく時間がかかりました。 – smp7d