2011-11-16 9 views
0
DetachedCriteria criteria = DetachedCriteria.forClass(Parent.class,"parent"); 
criteria.createAlias("parent.child","thechild"); 
criteria.add(Restrictions.eq("thechild.property", "somevalue"); 

私は上記のような多くのサンプルコードを読んでいますが、基準は2つのテーブル、parentとchildを結合していますが、条件のOn条件を指定する方法と場所はわかりません。次休止状態に「on」節を追加するにはどうすればいいですか?

select * from parent inner join child on parent.childid = child.id 

よう

が、上記の基準では、私はちょうどon条件を追加する見つけることができません。私はこれをハイバネート設定ファイルにセットするべきですか?クエリで設定することは可能ですか?

また、一緒に参加した後、2つのテーブルのすべてのフィールドの内容を取得するにはどうすればよいですか?両方のテーブルのすべてのフィールドを含む新しいクラスを作成しますか?

答えて

2

あなたはそれがすでにテーブルマッピングで指定されているために参加するためにフィールドを指定する必要はありません。たとえば:

<bag name="Children"> 
    <key column="ParentId" /> 
    <one-to-many class="Parent" /> 
</bag> 
1

は 'createAlias' 'オン' 条項の追加です。エイリアスは、SQLが生成されるときにjoin句に変換されます。クエリは親オブジェクトのListを返します。両方のテーブルからすべてのデータを取得するということに本当に従わないでください。子オブジェクトを持つ親オブジェクトのリストが表示されます。すべてのデータは、そこにマップされた方法を表しています。他の方法で表現したい場合は、必要な特定のデータを持つ新しいオブジェクトを作成する必要があります。時々誰かが、彼らが必要とするもの制限を追加可能なすべてのエイリアスを作成し、「標準」の基準をカット&ペーストを参照、パフォーマンス上の脇につながる

。これをしないでください! 'createAlias'を実行するとすぐに、エイリアスを後で使用するかどうかにかかわらず、SQLに結合されます。 (使用しているデータベースのバージョンによっては大きな問題にならないかもしれません)

関連する問題