基本上我在巨大的数据集上创建了一种图形。我在内存中保留了一堆节点,然后我迭代地加载另一堆节点来创建将它们与前一个节点连接起来的边缘,然后我改变那些保留在内存中的节点等等。
类似java的伪代码可能是这样的:
while(externalIterator.hasNext()) {
Set<Node> bunch1 = externalIterator.next();
em.getTransaction().begin();
internalIterator = nodeBunchList.iterator();
while(internalIterator.hasNext()) {
Set<Node> bunch2 = internalIterator.next();
computesEdges(bunch1, bunch2);
}
em.getTransaction().commit();
}
问题是:
我想知道是否有办法告诉实体经理不要记住所有这些事情,但是一旦我不再使用它就要摆脱它们。
答案 0 :(得分:0)
我想知道是否有办法向实体经理说不要 记住所有这些事情,但要尽快摆脱它们 不要再使用它了。
调用EntityManager.clear()告诉JPA清除持久性上下文是安全的。如果要对数据库进行任何更改,则始终需要调用EntityManager.flush(),以便将更改刷新到db。
要提高EntityManager.clear()调用的速度,请尝试启用OpenJPA的LiteAutoDetach功能。
<property name="openjpa.DetachState" value="loaded(LiteAutoDetach=true)"/>