Java Eclipse持久性库返回了错误的数据

时间:2011-01-09 21:28:30

标签: java eclipselink

我正在使用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,数组填充不正确。 更多背景 - 我有一个列出名称的表,点击一个名称弹出一个对话框,允许你更改名称,点击保存后关闭对话框并更新表格(包括数据库和用户界面),有时候是用户界面未正确更新,编辑的名称不会更新。更新运行代码,包括上面的块。在运行代码之前,数据库已正确更新,只是该数组未正确填充。

是否有其他人有任何与此相关的问题或有任何想法?

任何帮助非常感谢!

2 个答案:

答案 0 :(得分:1)

我通过在每个查询上刷新缓存来修复此问题,因此它与缓存有关。由于这个应用程序是单个用户而且不是很大,因此没有很多数据库命中,所以这对于这个应用程序来说很好。

答案 1 :(得分:0)

很难说没有看到其余的代码,但你确定:

  1. 您的交易记录不长(即您没有打开交易并在等待用户做某事时保持交易)。您应该仅围绕数据查询/更新打开和关闭事务。

  2. 在创建或更新实体时,分别调用persist(),merge()和refresh()。