Java 中间事务选择。如何将程序更改包括到这些选择中?

Java 中间事务选择。如何将程序更改包括到这些选择中?,java,spring,oracle,hibernate,Java,Spring,Oracle,Hibernate,是否可以从存储过程已修改的表中选择一条记录,并在同一SQL事务中以未提交状态检索该记录 崩溃了 启动事务。 检索记录A。存储在对象1中。 执行修改记录A的SP。 检索记录A。存储在对象2中。 结束交易。 结果-对象1和对象2相同。我希望他们与众不同。其中,对象2包括对修改后的记录A执行的存储过程的更改 编辑 我已经进一步缩小了范围。在步骤4中,我将进行两次调用以检索记录A: createSQLQuery->打印结果->显示步骤3中的正确数据。 createQuery->打印结果->显示步骤3中的

是否可以从存储过程已修改的表中选择一条记录,并在同一SQL事务中以未提交状态检索该记录

崩溃了

启动事务。 检索记录A。存储在对象1中。 执行修改记录A的SP。 检索记录A。存储在对象2中。 结束交易。 结果-对象1和对象2相同。我希望他们与众不同。其中,对象2包括对修改后的记录A执行的存储过程的更改

编辑

我已经进一步缩小了范围。在步骤4中,我将进行两次调用以检索记录A:

createSQLQuery->打印结果->显示步骤3中的正确数据。 createQuery->打印结果->显示步骤3中的过时数据。
我现在猜测Hibernate的第一级查询缓存保留了一条记录,并将其返回给我,而不是执行另一个SELECT。我还不确定解决这个问题的最佳方法。

执行存储过程后,需要清除hibernate会话,以强制从数据库检索更新的数据。

还有其他方法。我在SP执行之前和之后调用session.flush,以确保在SP执行之前DB状态正确,并且SP状态在执行后可以返回到事务。@JohnStrickler-您确定对存储过程使用相同的事务吗?另外,您是否使用二级缓存?另外,flush与clear flush不同,它将更改推送到db,但不清除会话,我不相信。冲水后你试过清洁吗?我进一步缩小了范围。看起来一级缓存正在阻碍。如果我使用createSQLQuery并检索数据,它是正确的。如果使用createQuery并检索实体列表,则它们在调用SP之前处于不正确的状态。仍然没有解决办法。@JohnStrickler-你真的试过叫clear吗?这将从一级缓存中删除任何缓存数据。@JohnStrickler-是,这是在hibernate之外进行任何外部修改更改所必需的。