1

休止状態を使用した多対 1 マッピングで問題が発生しています。テーブル A とテーブル B の 2 つのテーブルがあります。これらのテーブル間に多対 1 の関係をマッピングしました。両方のテーブルを一緒に使用することも、別々に使用することもできます。

Java のクラスに関するテーブルの表現は次のようになります。

class A{ 
 private B b; 
 private Integer val1; 
 private Integer val2; 
 private Integer val3; 
}

class B{
 private Integer val1;
 private Integer val2;
 private Integer val3;
}

問題は、テーブル A からレコードを取得/フェッチしようとするたびに、休止状態が常にテーブル B からレコードをフェッチすることです。パフォーマンスの問題を引き起こします。この状況に対処する方法はありますか?

適切な答えで私を導いてください。

4

2 に答える 2

2
@ManyToOne(lazy = true)
private B b;

は、あなたが必要とすることすべてです。詳細については、 Hibernateのドキュメントをお読みください。

于 2012-05-25T16:50:06.047 に答える
0

あなたの要件は に適合しLazy Initializationます。それを達成するために、注釈を追加するか、データの取得中に休止状態セッションのgetメソッドを使用できます。

あなたの場合、次のように書くことができます:

Session session = SessionFactory.getCurrentSession();
A aObject= (A) session.get(A.class, A_ID);

このhttps://community.jboss.org/wiki/AShortPrimerOnFetchingStrategies?_sscc=tリンクに記載されているとおり:

get() または load() を介して識別子で取得すると、Hibernate3 は単一のエンティティ インスタンスをロードします。このエンティティにマップされたすべてのコレクションと、対多または対 1 の関連付けによるすべての関連付けられたエンティティは読み込まれません。

于 2013-07-29T11:02:14.943 に答える