【发布时间】:2011-06-07 02:18:39
【问题描述】:
我有两个实体,交易和入口。交易有一些自己的数据和一个或多个条目的列表,其中包括借方和贷方金额。在应用程序的一部分中,我需要删除几乎所有这些,并发现 JPQL 在这种情况下是最简单和最快的。
我执行这段代码:
entityManager.createQuery(
"DELETE FROM Entry e WHERE e IN (:entries)").
setParameter("entries", new ArrayList<Entry>(
entriesToRemove)).executeUpdate();
entityManager.createQuery(
"DELETE FROM Transaction e WHERE e IN (:transactions)").
setParameter("transactions", new ArrayList<Transaction>(
transactions)).executeUpdate();
问题出在代码后面,仍然在同一个事务中(这次是执行事务)我需要遍历某些事务上存在的所有条目,EntityManager 仍然给我刚刚删除的事务。
我怀疑应该有一种方法来处理此事件,在我的示例中,我只执行了两个删除 JPQL,但我也可以调用外部服务或其他影响数据库的外部服务。无论如何,我需要确保 EntityManager 的缓存仍然有效,因为它现在仍然包含已删除的对象。
我已经尝试过 entityManager.flush();在这些删除后没有成功。因为我使用 executeUpdate();删除会立即刷新到底层数据库,所以我真的没想到它会有所帮助。
欣赏任何和所有的指针、提示和答案。
【问题讨论】: