8

私は JPA/OpenJPA を初めて使用しEntityManager.clear()、エンティティを永続化した後に呼び出さないとOutOfMemoryError(新しいエンティティをループに追加し続けます) を取得することに気付きました。これが予想される動作なのか、それとも単に OpenJPA 1.2.1 の不具合なのかはわかりません。

では、エンティティを自分で明示的にデタッチする必要がありますか? そうでない場合は、とにかく良い習慣ですか?

4

3 に答える 3

6

JPAの経験はあまりありません。ただし、これは便利です。JPA では、次の
いずれかを行う必要があります。
- トランザクションごとに新しい EntityManager を作成します。
- 各トランザクションの後に clear() を呼び出して、永続コンテキストをクリアします。

于 2010-02-11T10:01:05.537 に答える
5

永続化プロセス (読み取り) に取り込むオブジェクトの数によって異なります。大きな数を処理する場合 (または一部のオブジェクトが大きい場合) は、clear() の使用が理にかなっています。オブジェクトが読み取られるたびに、JPA impl によって L1 キャッシュに入れられる必要があります。

于 2010-02-11T10:22:23.747 に答える
3

あなたのデザインのどこかに問題があるようです。通常、エンティティは、エンティティ マネージャの範囲外になると切り離されます。これが、スコープ外でリレーションを遅延ロードできない理由の 1 つです。

私の経験に関する限り、私はほとんど em.clear() を使用しませんでした。Hibernate 実装と Toplink Essentials を使用しました。OpenJPA の経験はまだありません。

于 2010-02-11T10:51:13.267 に答える