2012-01-11 13 views
3

ハイバネートマッピングでは、プロパティーlazy="false"を設定しました。これにより、親のすべての子レコードがフェッチされます。Hibernateマッピング設定lazy = 'false'

これはアプリケーション全体で使用されています。
これは、アプリケーションの特定のモジュールでパフォーマンスの問題を引き起こします。ここでは、親レコードのみをフェッチします。

他の多くの場所で使用されているので、lazyプロパティをtrueに変更することはできません。これを修正する方法はありますか?

これ以上の情報が必要な場合はお知らせください。

答えて

6

これはあなたのlazy="false"を尊重しているため、休止状態にはそのような機能はありません。だから、私はあなたの要件を満たすために提案することができますあなたのクエリのクラスを別のダミーの具体的なクラスで拡張し、その子の関係なしでそのクラスのマッピングを定義しています。

letがあなたがそれに親のための

class Parent{ 

    private List<Child> kids; 

} 

とマッピングを子マッピングを持つクラスの親を持っているあなたが持っていると言う

<class name="Parent" table="PARENT"> 
// other properties 
// child mapping 
    <set name="kids" table="KIDS" lazy="false"> 
     <key column="parent_id"/> 
     <one-to-many class="Child"/> 
    </set> 
</class> 

です次に、あなたは親クラス

class MinimalParent extends Parent{ 
    // leave implementation as blank 
} 
を拡張する別のクラスを作成することができます

次に、

としてください0
<class name="MinimalParent" table="PARENT"> 
    // other properties 
    // do not map child in this 
</class> 

親オブジェクトだけが必要な場合は、このMinimalParentクラスを使用してください。あなたがそれを持って願って!

+0

助けてくれてありがとう。私は冬眠するのがかなり新しいので、あなたはそれについてどうやって行くのか教えてくれますか? – Chillax

+0

私の答えを更新しました。 plz check – Pokuri

+0

@子どものプロパティをマップしないと、どのようにプロキシを取得できますか? – wolverine

3

おそらく怠惰設定する必要があります=、デフォルトとして親のみを取得し、それが必要とされている場所の子供たちと一緒に親を取得するために、「参加フェッチ」とJPQLクエリを使用して「真」、例えば:

SELECT mag FROM Magazine mag JOIN FETCH mag.articles WHERE mag.id = 1 
+0

ありがとうございました。これは、これが使用されている多くのコードを変更することを意味するため、実行できません。他の選択肢はありますか? – Chillax