2011-04-21 9 views
0

私はHibernate 3.3.2を使用しています。私はB.多対多プロパティのHibernate投影

に多対多の関係をマッププロパティbを持つクラスA、

クラスAには、次のマッピングがあります:私は、次のことをしようとしています

<set name="b" table="a_b" lazy="true"> 
    <key column="id_a"/> 
    <many-to-many class="B" column="id_b" outer-join="auto" /> 
</set> 

を:

Criteria c = HibernateUtil.getSession().createCriteria(A.class); 
ProjectionList pl = Projections.projectionList(); 
pl.add(Projections.property("id_a"), "id_a"); 
pl.add(Projections.property("b"), "b"); 
c.setProjection(pl); 
c.add(Restrictions.eq("id", id)); 
Object o = c.list(); 

このコードはBのインスタンスをロードしません。返されるArrayListのbに対応する要素はnullです。あなたは何か考えていますか?

ありがとうございました。

答えて

0

fetchTypeは怠け者なので、あなたがBのエイリアスを作成する必要があります。c.createAlias(...)HibernateはB.

+0

私はc.createAlias( "b"、 "b")を試しましたが、何も変更されませんでした。私はそれが関係の基数と関係があると考えています。 – Marco

+0

それはうまくいくはずです、あなたはあなたの更新されたコードを投稿できますか? –

+0

コードは次のとおりです: 'Criteria c = HibernateUtil.getSession()。createCriteria(A.class); ProjectionList pl = Projections.projectionList(); pl.add(Projections.property( "id_a")、 "id_a"); pl.add(Projections.property( "b")、 "b"); c.setProjection(pl); c.createAlias( "b"、 "b"); c.add(Restrictions.eq( "id"、id)); オブジェクトo = c.list(); ' – Marco

1

とあなたがのBエンティティのリストfetchs提供されたコードに参加するように、特定のA列。あなたは、逆の方法で参加するBを取得し、ちょうどクエリを制限するために参加する実行する必要があります。

Criteria c = HibernateUtil.getSession().createCriteria(B.class); 
c.createCriteria("a").add(Restrictions.eq("id", id)); 
List<B> o = (List<B>) c.list(); 

上記のコードは、トリックを行う必要があります。

+0

重要なことは、 "逆の方法で" – lujop

関連する問題