2012-04-21 13 views
0

私はHibernate内にいくつかの遅延ロードされたmany-to-oneカラムを持つオブジェクトを持っています。私は必ずしも、一連の操作のためにオブジェクトをデータベースに永続させる必要はありません。Hibernateオブジェクトの永続属性をデタッチする方法

オブジェクトを直接取得して、多対1のエンティティにアクセスしようとするたびに、データベースから遅延取得する必要はなく、値を取得できます(そうでない場合は問題ありません)。最新の)セッションを開くことなく。

今はセッションを開き、新しいオブジェクトを作成し、実行する操作のために送信します。私が呼ぶたび

// Hibernate class 
public class Foo { 
    private Long id; 

    //many-to-one mapping 
    private Bar barObj; 

    //getters and setters 
} 

は今fooObj.getBarObj().getId() IDの値を取得するには、サーバーへのプロキシの呼び出しがあります。この呼び出しが発生しないようにするために、fooObjをローカルに保存する必要があります。

答えて

2

「fetch = FetchType.EAGER」注釈引数を使用することも、「join fetch barObj」と明示的に言及した照会を使用してフェッチすることもできます。第3に、write some code深い脱プロキシ化を達成することができます。これはおそらくあなたのニーズに最も適しています。

+0

フェッチタイプを怠け者にしたいと思います。私が検索したレコードは非常に多く、そのような操作はほとんど必要ありません。特定のオブジェクトを1つだけ取得する方法がより短くありますか? –

+0

次に、2番目の提案を使用してください.- 'join fetch barObj'を明示的に記述しているHQLクエリを使用してフェッチしてください。 –

+0

それは私が多くのそのようなオブジェクトを持っていて、私が世話をしなければならない複数の結合があるので、問題の回避策です。とにかくおかげです。 –

関連する問題