【问题标题】:Updated data (in Database) is not visible via JPA/Eclipselink [duplicate]更新的数据(在数据库中)通过 JPA/Eclipselink 不可见 [重复]
【发布时间】:2011-11-02 18:05:32
【问题描述】:

我有使用 JPA/Eclipselink 连接到数据库的 Oracle DB 和 Java 项目。
问题是当数据库中的某些数据更新时(手动使用 Oracle SQL developer),这些数据通过 JPA 是不可见的,只有旧值。
什么会导致这些问题?

【问题讨论】:

  • 确定您确实在 SQL Developer 中提交了更新?
  • 是的,检查了两次 ;)

标签: java jpa persistence eclipselink


【解决方案1】:

请尝试em.refresh()
JPA 的 EntityManager 将不知道您在其事务之外所做的任何更改,直到它重新加载数据。上面的命令将使它重新加载数据。

如果它是一个列表(使用 select 填充),那么您需要重新加载它。

【讨论】:

  • 这行得通,但对我来说它看起来很奇怪,因为首先我从数据库中选择了一些实体数据,然后我需要在使用前刷新它。你怎么看@Padmarag,这是常见的做法吗?谢谢。
  • 即使你使用 JDBC 也一样。一旦你触发了一个选择,我们就会获取结果集,事务结束并且连接将被关闭。在处理获取的数据时,可能会在数据库中添加新记录。因此,要获得新记录,您需要再次触发 select。 JPA 也遵循类似的逻辑。
  • 所以在进一步使用之前刷新通过 JPA 获得的所有数据是个好主意?但是每个 JPA 选择调用获得的结果集不应该是最新的吗?因为我实际上做了两个选择——一个在手动更新之前,另一个在它之后。
  • 即使更新后,也有可能没有从数据库加载数据。更新后,您可能需要调用 em.flush() 这将导致 EntitManager 将所有更新写入数据库,然后调用 em.refresh() 重新加载更新的数据。请仔细阅读 EntityManager 文档,因为起初这有点难以理解。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 2014-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多