对于某个查询,Oracle数据库中的更改不可见

时间:2016-01-28 10:14:47

标签: spring oracle jpa subquery

我有一个大型查询,看起来像这样:

SELECT stuff, CASE WHEN (some subselect) > 0 THEN 'value 1' 
         WHEN (another subselect) > 0 THEN 'value 2' 
         ELSE 'value 3' END AS status
FROM (yet another subselect) e 

效果很好。但是,从Spring开始,通过JpaRepositories我做了一些影响some subselect部分的更改,但由于某种原因,这些更改并非立竿见影。在其他查询中,更改是可见的,我尝试在Spring中使用多个跨国机制,尝试根本不使用事务,我在存储库中使用saveAndFlush,没有任何运气。

但是如果在更改可见之前重新启动Tomcat服务器,也会发生此延迟。从外部数据库操作程序也可以看到这种延迟,因此我猜测问题不在于我的应用程序。

某种类型的Oracle缓存或事务会影响这个吗?我该如何清除,冲洗,提交它们?

编辑(评论中的请求):

在Java中我只进行基本的更改

Java代码

MyEntity myEntity = myEntityDao.findOne(someId);
myEntity.setProperty(newValue);
myEntityDao.saveAndFlush(myEntity);

myEntityDao看起来像

@Repository
public interface MyEntityDao extends JpaRepository<MyEntity, Integer> {
     //... other unrelated HQL query methods
}

抱歉,我无法发布任何更具体的信息,但这个信息非常庞大,而且,出于公司原因,我也无法发布。另请注意,一切都在工作,但在修改和这一个特定查询之间有一定的延迟。其他查询可以立即查看更改。

1 个答案:

答案 0 :(得分:1)

最可能的原因是:
1)在单独的事务中进行的更改,并且在查询开始之前未提交 Oracle不允许从其他事务中读取未提交的更改 查询返回查询开始时的一致数据 2)如果您将事务更改为“只读”或“可序列化”,那么Oracle将返回与事务开始一致的数据。因此,在您的只读事务开始之前,需要在另一个事务中进行更改。