将 EntityManager 与数据库同步

synchronize EntityManager with database

我从数据库中删除了一条记录,实体管理器仍然引用删除的记录。

我有以下查询:

List results = em.createNamedQuery("Customers.findNew")
 .setParameter("status", "n")
 .getResultList();

我正在取回包含已删除记录的结果。我已经阅读了实体管理器 caches the database 以获得更好的性能。如果只有使用实体管理器的应用程序正在访问数据库,这很好。但是当多个系统访问同一个数据库时会发生什么?

我试过:

  1. em.flush()  
  2. em.refresh()        
  3. em.clear()

就在我使用实体管理器查询数据库之前,尝试强制重新同步,但 none 确实如此。我仍然得到数据库中不再存在的相同记录。

更新

我用来删除记录的程序,Oracle SQL Developer,没有提交更改。所以 JPA 工作正常,这是我用来更改数据库的程序没有提交更改。如果您遇到类似问题,请确保数据库管理程序已提交更改。

EntityManagers 自己缓存对象,供自己使用。这样一般就省了。

此外,您可以启用二级缓存,系统之间可能会出现不一致。如果您启用了它,请尝试禁用它。

您是否使用相同的 EntityManager 删除了实体?如果不是,请确保删除实体的事务已提交,并确保您读取的 EntityManager 的事务在删除提交后启动。