2012-05-01 8 views
1

エンティティmyParentを定義していますが、1つのことを除いて正常に動作します。それは次のように定義していますeager fetchは、休止状態で左結合を実行します

@OneToMany(mappedBy = "myParent", cascade = { CascadeType.ALL }, fetch = FetchType.EAGER) 
private List<Child> children; 

これは左の原因となるか、右に2人の子供がある場合、私は2つの親を取得しますので、実行することが参加。私はただ一つの親と二人の子供がほしいと思うことは望ましくない。

fetchtypeをlazyに変更することができましたが、実際にはそのようにしたいとは思いませんでした...?

私がすべての親を選択すると、リストに重複した親が含まれている場合、重複は欲しくない。

答えて

1

DISTINCT_ROOT_ENTITYResultTransformerを使用してください。

これは、結果の各行がルートエンティティの別個のインスタンスであることを意味します。

+0

ありがとうございました。それが唯一の方法ですか?または、デフォルトを定義するための注釈および/またはパラメータがありますか? – NimChimpsky

+0

あなたは 'SELECT' [FetchMode](http://docs.jboss.org/hibernate/orm/4.1/javadocs/index.html?org/hibernate/annotations/FetchMode.html)を使うこともできます。これはおそらくあなたのDBで追加のクエリが実行される結果となるでしょうが、理想的ではないかもしれません。 – darrengorman

+1

私は時々冬眠が努力の価値があるかどうか疑問に思います...? – NimChimpsky