我从数据库中删除了一条记录,实体管理器仍引用该已删除的记录。
我有以下查询:
List results = em.createNamedQuery("Customers.findNew")
.setParameter("status", "n")
.getResultList();
我收到的结果包括已删除的记录。我已经阅读了实体经理caches the database以获得更好的性能。如果只有使用实体管理器的应用程序正在访问数据库,那么这很好。但是当多个系统访问同一个数据库时会发生什么?
1. em.flush()
2. em.refresh()
3. em.clear()
在我使用实体管理器查询数据库之前,尝试强制重新同步,但它们都没有。我仍然得到不再在数据库中的相同记录。
我用来删除记录的程序 Oracle SQL Developer 没有提交更改。所以JPA工作正常,我用来对数据库进行更改的程序没有提交更改。如果遇到类似问题,请确保db admin程序已提交更改。
答案 0 :(得分:1)
EntityManagers缓存对象本身,供自己使用。这通常是保存。
此外,您可以启用二级缓存,系统之间可能会出现不一致。如果您启用了此功能,请尝试将其禁用。
您是否使用相同的EntityManager删除了实体?如果不是,请确保提交删除实体的事务,并确保在提交删除后启动读取EntityManager的事务。