【发布时间】:2019-06-12 22:51:06
【问题描述】:
在@Transactional方法中间调用Hibernate flush()是否有可能将不完整的结果保存在数据库中? 例如,这个函数是否可以将“John”保存到数据库中?
@Transactional
public void tt() {
Student s = new Student("John");
em.persist(s);
em.flush();
// Perform some calculations that change some attributes of the instance
s.setName("Jeff");
}
我在 H2 内存数据库中尝试过,它没有保存不完整的事务更改。但是在某些条件下是否可能,并且可能与另一个数据库引擎一起使用?
【问题讨论】:
-
为什么会保存不完整的更改?这就是为什么交易就是交易。事务可以完成或未完成,但不能部分完成。如果你想实现一个行为,你应该使用 2 个单独的事务。
-
aBnormaLz,我就是这么想的。但是在有关 Hibernate 和 Spring 的视频之一中,据说 flush() 会强制实体管理器保存这些更改,并且如果在调用 flush() 后此方法中出现问题,这些更改将被回滚。
标签: java sql spring hibernate jpa