2011-06-27 8 views
0

バージョンで子供を結合するためのAPIと同等以下のHBMと基準親

class Parent { 
    Long id; //auto generated sequence and primary key 
    String name; 
    Set<Child> children; 
} 

class Child { 
    Long id; 
    String name; 
    Parent parent; 
} 

::私が欲しいもの

<class name="my.Parent" table=PARENT"> 
    <id name="id" column="PARENT_ID" type="java.lang.Long"> 
    <property name="name" column="NAME" type="java.lang.String"> 
    <set name="children" table="CHILDREN" inverse="true"> 
     <key><column name="PARENT_ID" not-null="true" /></key> 
     <one-to-many class="my.Child" /> 
    </set> 
</class> 

<class name="my.Child" table=CHILD"> 
    <composite-id> 
    <key-many-to-one name="parent" column="PARENT_ID" class="my.Parent" /> 
    <key-property name="id" column="CHILD_ID" type="java.lang.Long" /> 
    </composite-id> 
    <property name="name" column="NAME" type="java.lang.String"> 
</class> 

3.3

こんにちは、 をHibernateは私が2つの単純なモデルを持っていますこれを達成するには、次のようにします: "親の名前が「John」であるすべての子を選択します。このようなhqlのCriteria api相当の記述方法はわかりません:

SELECT child 
FROM Child as child join child.parent 
where parent.name = 'John' 

私は1つ下のを試してみましたが、その予想を生成しないが、クエリに参加:

Criteria c = session.createCriteria(Child.class); 
c.createCriteria("parent").add(Restrictions.eq("name", "John"); 
c.list(); 

誰も私が間違っているのか見てもらえますか?

アイデアをいただければ幸いです。

+0

?結果に何が問題なのですか? –

+0

HBMは、Parentテーブルへのjoinを使用してクエリを生成しています。 Criteria APIがParentに追加した制限を生成していますが、FROM句にParentテーブルを追加したり、where句に(parent_idの)join条件を追加したりしていません。 – Bhargava

答えて

0

JPA 2.0基準のAPIを使用して、あなたが行うことができます:あなたの基準は、次に何を生成している

criteriaBuilder cb =... 
CriteriaQuery<child> q=.... 
Root<child> entity= ..... 
Join<child, parent> o = entity.join(child_.parent); 
Path<parent> c = entity.get(child_.parent); 
Path<String> name = c.get(parent_.name); 
.... where(cb.equal(name, "john"));