2011-01-11 4 views
0

Hibernate/JPAがクエリを実行する理由を判断する良い方法はありますか?私は2つの実体をリンクしましたHibernate JPA:SQLはなぜ実行されますか?

@OneToOne(cascade = {CascadeType.REMOVE, CascadeType.PERSIST}, 
      fetch = FetchType.LAZY) 

1つのエンティティをフェッチするとき、もう1つのエンティティも照会されます。私はそれを避ける方法を見つけようとしています(実際の怠惰な読み込み)。

おかげで、

は、すべての

+0

もう一方が照会されていることをどのように知っていますか?ここにあなたの質問をコピーできましたか? –

答えて

0

まず-dennis FetchType.LAZYは、持続性プロバイダのヒントで、プロバイダはそれに従う必要はありません。

この場合、プロバイダは関係がnullであるかどうかをチェックする必要があります(そうでなければ、プロバイダはエンティティへの遅延アクセス用のプロキシオブジェクトを作成できます)。

あなたが次のことを試すことができます。

  • この関係はnullことはありません場合は、フィールドへのアクセスを(すなわち、注釈がフィールド上に置かれている)を使用する場合、プロパティへのアクセスを使用しようとoptional = false
  • としてマーク
0

Enum FetchTypeは、データベースからデータを取得する方法を定義しています。 EAGER戦略は、データを熱心に取得する必要がある持続性プロバイダの実行時の要件です。 LAZY戦略は、データが最初にアクセスされたときに遅延的にフェッチされるべきであるという持続性プロバイダのランタイムへのヒントです。 LAZY戦略のヒントが指定されているデータを熱心に取得できます。

Enum FetchType

関連する問題