Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cocoa/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 更新的数据(在数据库中)无法通过JPA/Eclipselink看到_Java_Jpa_Persistence_Eclipselink - Fatal编程技术网

Java 更新的数据(在数据库中)无法通过JPA/Eclipselink看到

Java 更新的数据(在数据库中)无法通过JPA/Eclipselink看到,java,jpa,persistence,eclipselink,Java,Jpa,Persistence,Eclipselink,我有一个Oracle数据库和Java项目,它使用JPA/Eclipselink连接到数据库。 问题是,当数据库中的某些数据更新时(使用Oracle SQL developer手动更新),这些数据通过JPA不可见,只有旧值。 什么会导致这些问题?请尝试 JPA的EntityManager将不知道您在其事务之外所做的任何更改,直到它重新加载数据。上面的命令将使其重新加载数据 如果它是一个列表(使用select填充),那么您需要重新加载它。确实在SQL Developer中提交了更新吗?是的,检查了两

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

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


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

确实在SQL Developer中提交了更新吗?是的,检查了两次;)这是可行的,但对我来说它看起来很奇怪,因为首先我从数据库中选择了一些实体数据,然后我需要在使用前刷新它。你怎么看@Padmarag,这是惯例吗?谢谢。即使您使用JDBC,这也会起到同样的作用。一旦您触发了select,我们将获取结果集,事务结束,连接将关闭。在处理提取的数据时,可能在数据库中添加了新记录。因此,要获取新记录,您需要再次触发选择。JPA也遵循类似的逻辑。因此,好主意是在进一步使用之前刷新通过JPA获得的所有数据?但是,每次JPA select调用获得的结果集不应该是最新的吗?因为我实际上做了两个选择——一个在手动更新之前,另一个在手动更新之后。即使在更新之后,数据也可能没有从数据库加载。更新后,可能需要调用em.flush(),这将导致EntitManager将所有更新写入数据库,然后调用em.refresh()重新加载更新的数据。请仔细阅读EntityManager文档,因为一开始理解起来有点棘手。