我是JPA / OpenJPA的新手,我注意到如果我在持久化实体后没有调用EntityManager.clear()
,我会得到一个OutOfMemoryError
(我不断在循环中添加新实体)。我不确定这是否是预期的行为,或者只是OpenJPA 1.2.1故障。
那么,我是否需要自己明确分离实体? 如果我不是,那么这是一个很好的做法吗?
答案 0 :(得分:5)
我对JPA没有多少经验。然而,这将是有用的 -
在JPA中你必须:
- 为每笔交易创建一个新的EntityManager
- 在每次事务之后调用clear()以清除持久性上下文。
答案 1 :(得分:5)
取决于您为持久性进程(读取)带来多少对象。如果处理大数(或某些对象很大),那么使用clear()可能有意义。每次读取一个对象时,它都应该由JPA impl。
放入L1缓存中答案 2 :(得分:3)
在您的设计中,某些地方听起来有些不对劲。通常,一旦实体超出实体管理器的范围,实体就会分离。这就是你不能懒惰加载关系的原因之一,超出范围。
就我的经验而言,我很少使用em.clear(),如果有的话。我使用了Hibernate实现和Toplink Essentials。没有使用OpenJPA的经验。