我应该经常调用EntityManager.clear()来避免内存泄漏吗?

我是JPA / OpenJPA的新手,我注意到如果我在持久化实体后没有调用EntityManager.clear() ,我会得到一个OutOfMemoryError (我继续在循环中添加新实体)。 我不确定这是否是预期的行为,或者只是OpenJPA 1.2.1故障。

那么,我是否需要自己明确分离实体? 如果我不是,那么这是一个好习惯吗?

我对JPA没有多少经验。 然而,这将是有用的 –
在JPA中,您必须:
– 为每个事务创建一个新的EntityManager。
– 在每个事务之后调用clear()以清除持久性上下文。

取决于您为持久性过程(读取)带来多少对象。 如果你处理大数(或者某些对象很大),那么使用clear()是有意义的。 每次读取对象时,它都应该由JPA impl放入L1缓存中。

在您的设计中,某些地方听起来有些不对劲。 通常,一旦实体超出实体管理器的范围,实体就会分离。 这就是你不能懒惰加载关系的原因之一。

就我的经验而言,我很少使用em.clear(),如果有的话。 我使用了Hibernate实现和Toplink Essentials。 还没有OpenJPA的经验。