我有两个实体,事务和条目。交易有一些自己的数据和一个或多个条目的列表,其中包括借记和贷记金额。在应用程序的一部分中,我需要删除几乎所有这些,并发现JPQL在这种情况下是最简单和最快的。在同一事务使JPA知道数据库更改
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();删除操作会立即刷到底层数据库,所以我没有真正期待它的帮助。
欣赏任何和所有的指针,提示和答案。