私は、メモリリークを回避するために、多くの場合、EntityManager.clear()を呼び出すことになっているだろうか?

StackOverflow https://stackoverflow.com/questions/2243554

質問

私はJPA / OpenJPAのに新たなんだと私はエンティティを永続化した後、私はEntityManager.clear()を呼び出さない場合、私はOutOfMemoryError(私はループ内で新しいエンティティを追加し続ける)を得ることに気づきました。これは正常な動作であるか、それだけだとOpenJPAの1.2.1グリッチどうかはわかりません。

だから、私は明示的に実体を自分自身を切り離すために必要なのですか? 私はありません場合は、それがとにかく良い練習ですか?

役に立ちましたか?

解決

私はJPAで多くの経験を持っていません。しかし、これは便利だろう -

:JPAでは、どちらかでなければなりません - 各トランザクションのための新しいEntityManagerを作成します
。 - 永続コンテキストをクリアするために、各トランザクションの後)(クリアコール

他のヒント

は、あなたが永続化プロセス(読み)に持ち込むどのように多くのオブジェクトによって異なります。あなたが多数(またはオブジェクトのいくつかが大きい)を扱う場合は、(クリアの使用)の意味を作ることができます。オブジェクトが読まれるたびに、それはJPAのIMPLによってL1キャッシュに配置する必要があります。

あなたのデザインのどこかで間違って何かがあるようですね。それはエンティティマネージャの範囲外になると通常、エンティティがデタッチされます。そして、範囲外、あなたは怠惰なロード関係することはできません理由の一つのthatsます。

限り私の経験に関しては、私はめったに使われないem.clear()、もし今までに。私は、Hibernateの実装、およびTopLink Essentialsの使用しました。 OpenJPAのではありません経験、まだます。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top