繁体   English   中英

事务中间刷新会话

[英]flush session in the middle of transaction

Stack : spring and hibernate.

service method looks like below,

@Transaction (readonly=false)

public void doSomething(){

    step1: fetch object1,

    step2: modify list from object1 (i.e object1.getListObject2()),

    step3: fetch object3,

    step4: do some more processing,

}

我注意到在step3中刷新了会话。 无法理解为什么在事务中间必须刷新会话。

考虑到在步骤2中所做的更改,最肯定需要刷新它,以便在步骤3中执行查询以检索正确的值。

让我们举一个简单的例子:

List<Bike> bikes = findAllBikes();
bikes.forEach(bike -> bike.setColor("red"));
List<Bike> blueBikes = findAllBlueBikes();
// blueBikes should be an empty list, right?

如果Hibernate在执行findAllBlueBikes()之前没有刷新,它将对仍然包含蓝色自行车的数据库行执行查询,因为之前在行上所做的更改(即使所有自行车变为红色)尚未被刷新。 因此,该查询将返回非空的自行车列表,尽管应该将其全部显示为红色。

更糟糕的是:由于Hibernate会在一级缓存中找到这些自行车,因此查询蓝色自行车会返回实际上是红色的自行车。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM