Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/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 如何从后端更新在检索到的实体中反映的表_Java_Oracle_Jpa_Eclipselink_Oracle Sqldeveloper - Fatal编程技术网

Java 如何从后端更新在检索到的实体中反映的表

Java 如何从后端更新在检索到的实体中反映的表,java,oracle,jpa,eclipselink,oracle-sqldeveloper,Java,Oracle,Jpa,Eclipselink,Oracle Sqldeveloper,我正在开发一个SpringMVCWeb应用程序,使用Windows7、EclipseJuno、Eclipselink JPA作为ORM,Glassfish作为Oracle 11g的应用服务器。在使用Eclipselink时,我注意到当我通过执行update PL/SQL查询手动更新表时,在重新启动服务器之前,它不会对Eclipselink检索到的实体产生任何影响。尽管如此,我还是通过在persistence.xml中使用NONE并使用EntityManager.clear()、EntityMan

我正在开发一个SpringMVCWeb应用程序,使用Windows7、EclipseJuno、Eclipselink JPA作为ORM,Glassfish作为Oracle 11g的应用服务器。在使用Eclipselink时,我注意到当我通过执行update PL/SQL查询手动更新表时,在重新启动服务器之前,它不会对Eclipselink检索到的实体产生任何影响。尽管如此,我还是通过在persistence.xml中使用
NONE
并使用
EntityManager.clear()
EntityManager.close()
@Cacheable(false)
禁用了Eclipselink缓存

然后,我注意到当我使用OracleSQLDeveloper表设计器更新表时,它完全可以正常工作,并且实体显示更新的信息。所以我检查了SQLDeveloper日志,查看它用于更新行的查询,并在where子句中看到它使用了ORA_ROWSCN和ROW ROWID。之后,我使用了与SQLDeveloper用于更新表的where子句完全相同的where子句,但实体仍然显示旧信息

我想知道Eclipslink不从数据库获取实时数据涉及哪些因素?但是,在使用SQLDeveloper designer更新表之后,Eclipselink将显示实时数据。似乎使用SQLDeveloper表设计器修改表数据时,也会使用一些数据库功能将表标记为已更改。然后,Eclipselink将在击中桌子之前读取标记


另外,为了得到更多的澄清,当用户命令执行TypedQuery时,在Eclipselink决定点击数据库之前,有人知道它涉及哪些步骤吗?我很好奇它在哪里存储缓存的实体?因为缓存只需重新启动计算机即可休息;我尝试重新启动Glassfish,杀死java进程并注销当前用户,但没有一个成功。既然我将Eclipselink配置为不使用任何缓存过程,为什么它仍然在缓存实体?是否可以完全关闭Eclipselink中的缓存?

听起来根本不像Eclipselink缓存问题-如果您关闭正在运行的VM Eclipselink(即glassfish服务器),则它没有缓存。您是如何发出PL/SQL查询的,以及在之后提交事务的?SQLDeveloper可以看到这些更改吗?我尝试使用
asadmin-stop-domain
来停止Glassfish域,但在入门之后Eclipselink仍然返回旧的实体。我想知道从哪里来的?我通过将PL/SQL查询写入Oracle SQLDeveloper中的SQL文件来执行它们。当我使用Eclipselink更新实体时,我可以通过使用SQLDeveloper中的SQL文件在表中看到预期的更改。我猜[link]()也有同样的问题,我对此表示怀疑,因为我提到过EclipseLink在JVM中运行,所以当它关闭时,没有缓存。与Web服务器相同;如果您关闭了它,并且在它开始备份时仍然看到过时的数据库数据,那么其他原因就是罪魁祸首。可以通过对过时实体调用em.refresh()进行验证。当EclipseLink看不到更改时,请关注您如何进行更改-您是否能够通过JDBC或app server上的本机SQL查询进行连接以查看更改?很抱歉,在尝试使用SQL Plus后,我发现我需要提交
commit更改。我是甲骨文的新手。另一方面,SQL开发人员在执行更新后返回更新的数据,这让我很困惑。非常感谢。