我是新来的JPA / OpenJPA中,我发现,如果我不叫EntityManager.clear()后,我坚持实体,我得到一个OutOfMemoryError(我一直在一个循环中添加新的实体)。我不知道这是否是预期的行为,或者它只是和OpenJPA 1.2.1毛刺。

所以,我是否需要明确地分离实体自己? 如果我不在,这是一个很好的做法呢?

有帮助吗?

解决方案

我没有与JPA很多经验。然而,这将是有用的 - 结果 在JPA你必须:点击 - 为每个交易一个新的EntityManager结果。 - 呼叫清除()每次交易后以清除持久性上下文

其他提示

要看你有多少个对象带入持续的过程(读)。如果处理大量(或某些对象是大),然后使用明确的()是有意义的。每当一个对象被读取它应当由JPA IMPL放于L1高速缓存。

这听起来像有什么不对的地方,在你的设计。通常情况下,实体被分离,一旦它的实体管理的范围之内。而这就是其中一个原因,你不能偷懒负载关系的范围之内。

据我的经验而言,我很少使用em.clear(),如果有的话。我用Hibernate实现,和TopLink要点。没有与OpenJPA的经验,但。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top