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,
}
我注意到 session 在第 3 步中被刷新。 无法理解为什么 session 必须在事务中间刷新。
最佳答案
考虑到步骤 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 会在其一级缓存中找到自行车,因此对蓝色自行车的查询将返回实际上是红色的自行车。
关于java - 在事务中间刷新 session ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33979644/