テーブル「A」にレコードを挿入し、適切な「B」レコードを読み取り、「A」に参照を設定し、「A」を保存することで、レコードを別のテーブル「B」のレコードにリンクする単純なJavaアプリがあります。記録。私が抱えている問題は、Hibernateがリンクプロセス中に読み取るすべての「B」レコードを保持しているように見えることです。これにより、最終的にプログラムのメモリが不足します(ヒープスペースエラー)。
JHATでヒープダンプを調べました。これが問題のあるクラスです。上位3つはすべてHibernateのもので、4つ目は私のHibernate/JPA管理対象エンティティークラスです。メモリ不足エラーは、GeoEntityの別のインスタンスである私の「B」テーブルエンティティをインスタンス化しようとしたときに発生します。
134489 instances of class org.hibernate.engine.spi.EntityKey
67245 instances of class org.hibernate.engine.spi.EntityEntry
67245 instances of class org.hibernate.internal.util.collections.IdentityMap$IdentityKey
67244 instances of class com.electricgearbox.model.GeoEntity
私は自分のコードを調べましたが、参照を設定してからそれらをクリアするようなことは何もしていないと確信しています。実際、ループの最後でnullに使用する2つのローカル参照を明示的に設定しています。
それで、誰かがこれに遭遇しましたか?コードの行が欠落しているか、設定を忘れていることは確かですが、グーグルでHibernateのドキュメントを読んでも、明らかな解決策はありません。明白な理由なしに、Hibernateがこれらの参照を保持する理由は何ですか?