2017-03-01 15 views
0

I持っている。このことにより、セットアップタイプの子供のいくつかの子供たちとの多くの関係を1とエンティティの名前付きエンティティ:私はのようにQUIKのように、それを必要とするので、私はfetch=FetchType.LAZYを入れ休止状態の設定はフェッチ動的

@OneToMany(fetch=FetchType.LAZY, mappedBy = "child") private Set<Child> children; 

私は子供が何であるかを知る必要がないときはいつでも可能です。

場合によっては、代わりに私はいくつかのエンティティを探すときにそれらを取得する必要があります。これらのケースでは

は、これらの1234質問の提案によると、私は一種の何かを書きました:

from Entity as ent left join fetch ent.children where /* some conditions */ 

ポイントは、私は別のクラスから条件を取得するということですので、私種類のクエリオブジェクトを変換する方法が見つからない限り、条件を使用しません。

getSession().createQuery("from Entity where /* some conditions */"); 

問題は、結合によって与えられるレコードの数が得られることです。空の子集合ごとに1つ、子ごとに1つです。

私が必要とするのは、セットがインスタンスの子によって正しく設定されているエンティティのインスタンス(またはリストのgetResultList()というインスタンスに従うインスタンスのリスト)だけです。

答えて

0

これは実際には機能です。子なしでEntityをフェッチし、後で再び永続化すると仮定すると、Hibernateはすべての子を削除します。あなたが行った天気を判断できないか、自分自身を削除しなかったからです。

エンティティ全体ではなく、タプルをフェッチすることができます(その場合、関心のあるテーブルの列のみを選択してください)。アクティブなトランザクション内では、(適切に)遅延フィールドにのみアクセスできます。