在原始的JPA规范中(因此不是像Hibernate或EclipseLink这样的特定实现),是否有一个选项可以为特定类型的实体调用em.clear()
,而不为其他类型的实体调用em.clear()
?
我问这个问题的原因是,我有一个创建和存储成千上万个实体的过程;但是,每个实体都有一个子实体,它是数据库中大约30条记录中的一条,所以我希望能够调用类似em.clear(MainEntity.class)
这样的函数,这意味着我不会清除被重用的子实体该高速缓存,也不会积累成千上万条不需要的记录。
下面是我目前正在做的一个简单的例子:
List<Child> children = (List<Child>)em.createQuery("Select c from " + Child.entityName + " c").getResultList();
for (int i=0;i<700000;i++)
{
Parent p = createParent(i, getRandomChild(children));
em.persist(p);
if (i%1000 == 0)
{
em.flush(); // push to db
em.clear(); // remove old items from cache - but unfortunately removes children too
// as I've cleared the cache, I need to repopulate this to reattach the children again
children = (List<Child>)em.createQuery("Select c from " + Child.entityName + " c").getResultList();
}
}
1条答案
按热度按时间vcirk6k61#
您可以使用
就像这样
从持久性上下文中仅删除父级。