我正在使用EclipseLink提供程序与mysql数据库通信。我注意到在我的应用程序区域中,库返回的查询数据与数据库不匹配。
查询是:
@NamedQuery(name = "EmailAddress.findAll", query = "SELECT e FROM EmailAddress e")
这个查询是正确的,我很确定。我用来运行该查询的代码是:
EntityTransaction entr = em.getTransaction();
entr.begin();
emailAddresses = em.createNamedQuery("EmailAddress.findAll").getResultList();
em.close()
我在关闭时设置了一个断点,以便我可以看到emailAddress列表的内容,大约1次3,数组填充不正确。 更多背景 - 我有一个列出名称的表,点击一个名称弹出一个对话框,允许你更改名称,点击保存后关闭对话框并更新表格(包括数据库和用户界面),有时候是用户界面未正确更新,编辑的名称不会更新。更新运行代码,包括上面的块。在运行代码之前,数据库已正确更新,只是该数组未正确填充。
是否有其他人有任何与此相关的问题或有任何想法?
任何帮助非常感谢!
答案 0 :(得分:1)
我通过在每个查询上刷新缓存来修复此问题,因此它与缓存有关。由于这个应用程序是单个用户而且不是很大,因此没有很多数据库命中,所以这对于这个应用程序来说很好。
答案 1 :(得分:0)
很难说没有看到其余的代码,但你确定:
您的交易记录不长(即您没有打开交易并在等待用户做某事时保持交易)。您应该仅围绕数据查询/更新打开和关闭事务。
在创建或更新实体时,分别调用persist(),merge()和refresh()。