将EntityManager与数据库同步

时间:2015-01-28 16:16:19

标签: java jpa entitymanager

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

我有以下查询:

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程序已提交更改。

1 个答案:

答案 0 :(得分:1)

EntityManagers缓存对象本身,供自己使用。这通常是保存。

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

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