use*_*914 1 java hibernate jpa
我有一个简单的Java应用程序,它将记录插入表“ A”中,通过读取适当的“ B”记录,在“ A”中设置引用并保存“ A”将它们链接到另一个表“ B”中的记录。记录。我遇到的问题是Hibernate显然保留了在链接过程中读取的每个“ B”记录,这最终导致程序内存不足(堆空间错误)。
我用JHAT查看了堆转储,这是令人讨厌的类。前三个都是Hibernate的东西,第四个是我的Hibernate / JPA管理的实体类。内存不足错误发生在尝试实例化我的“ B”表实体GeoEntity的另一个实例时:
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
Run Code Online (Sandbox Code Playgroud)
我已经遍历了我的代码,并且可以确定我没有做任何事情,例如设置引用,然后再也不清除它们。实际上,我在循环末尾将两个本地引用显式设置为null。
那么,有人碰到这个吗?我确定这是我遗忘的缺少代码的行或设置,但是谷歌搜索和阅读Hibernate文档并没有提供明显的解决方案。是什么使Hibernate毫无理由地保留这些引用?