2016-03-29 13 views
0

私たちが開発する一連のWebサービスで作業しています。HibernateはEAGERに設定されたオブジェクトのプロキシを返します

サービスの1つは、JPAマッピングを使用して一部のテーブルから情報を取得します。 Hibernateはオブジェクトを返し、期待どおりに動作します。

他のサービスは非常によく似たオブジェクトを取得し、読み取り対象ではなくプロキシを返します。フェッチはEAGERに設定されているので、なぜこれが起こっているのか分かりません。プロキシを実際のデータに変換するいくつかの方法を試しましたが(私はEAGERに設定されているので、これは不必要であると理解していますが)、プロキシは変換されません。

重要な場合に備えて、私たちは休止状態3.5.4 - finalで作業しています。

私は本当にどこから始めるべきか分かりません。我々は呼んでデータ取得するに

@Entity 
public class Foo1 
{ 
    @OneToMany(fetch = FetchType.EAGER, orphanRemoval = true, cascade = CascadeType.ALL) 
    private List<Foo2> list = new ArrayList<Foo2>(); 
} 

@Entity 
public class Foo2 
{ 
    @ManyToOne(fetch = FetchType.EAGER) 
    private Foo3 obj; 
} 

entityManager.find(Foo1.class, id);  

一つは、私が思っていたかもしれない、Hibernateは管理内部例外をしていると私は代わりに、実際のオブジェクトのプロキシを取得理由があるということですか?

EDIT これは問題に関連する休止状態の設定です:

<property name="hibernate.max_fetch_depth" value="0"/> 
<property name="hibernate.default_batch_fetch_size" value="16"/> 
<property name="hibernate.jdbc.batch_size" value="16"/> 
+1

エンティティクラスを投稿して、エンティティを取得する方法を教えてください。 –

+0

@MadhusudanaReddySunnapu:済ませて、申し訳ありません。私は最初にそれを追加しておくべきだった。 –

+0

'Foo2'と' Foo3'の両方がEAGERとしてマークされています。私は 'List list'のプロキシを見ていると思います。 'show_sql'を有効にして、EAGER関係を取得するためにクエリが実行されているかどうかを確認できますか? –

答えて

0

我々はentityManager.unProxyを呼び出して問題を修正しましたが、マッピングがEAGERに設定されているとして、それはすでにunProxiedする必要があるとして、それはまだ間違って感じています。

+0

理想的には、EAGERコレクションをロードするべきです。クエリがEAGER関係を取得するかどうかを調べるようになっていますか? –

+0

@MadhusudanaReddySunnapu:この場合、クエリは実行されません。 –

+0

@MadhusudanaReddySunnapu:もちろんこれは単純化された例ですが、実際のエンティティ(Foo3)は複雑な依存関係ツリーを持っています。これが意味を持つかどうかは分かりません。 –

関連する問題