将 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 的事务在删除提交后启动。
我从数据库中删除了一条记录,实体管理器仍然引用删除的记录。
我有以下查询:
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 的事务在删除提交后启动。