2012-02-06 12 views

答えて

5

これは非常に危険なことです.Hibernateでサポートされていますが、ロードするエンティティはデータベースに格納されているものの現実を反映していないため、JPAではJPAではありません。 Bsのリストを変更した場合、HibernateはAにbalongするが、クエリによってロードされていないすべてのBsを削除するかもしれません。これは、フェッチモードで参加するシンプルなインナーである、と述べた

Criteria c = session.createCriteria(A.class, "a"); 
c.createAlias("a.b", "b"); 
c.add(Restrictions.eq("b.name", "abc"); 
c.setFetchMode("a.b", FetchMode.JOIN); 
+0

私たちが正しく読むだけでいいのですか? – digz6666

+0

不正なデータをユーザに提示しない限り、この不正確なデータに基づいて悲惨な判断を下します。 –

0

私は上記のコードを試してみたし、Bコレクションをフィルタリングしないように私には思えます。私は最終的にクラスで

@FilterDef(name="BFilter", 
parameters= @ParamDef(name="bName", type="string")) 
Public class A{ 

    @Filter(
     name = "BFilter", 
     condition="name = :bName" 
    ) 
    private List<B> bList; 
} 

を追加のフィルタを追加しましたし、私はそれはDBに2回照会し、望ましいことではないかもしれない明確なクラス

を取得するためにsetResultTransformer(Criteria.DISTINCT_ROOT_ENTITY); を使用して何

。他の選択肢がある場合は私を修正してください。