gpt4 book ai didi

java - 将 EntityManager 与数据库同步

转载 作者:行者123 更新时间:2023-12-01 11:58:14 25 4
gpt4 key购买 nike

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

我有以下查询:

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 工作正常,这是我用来更改数据库的程序没有提交更改。如果您遇到类似的问题,请确保数据库管理程序提交了更改。

最佳答案

EntityManager 缓存对象本身,以供自己使用。这一般都是保存的。

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

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

关于java - 将 EntityManager 与数据库同步,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28197124/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com