【发布时间】:2018-09-26 01:33:32
【问题描述】:
我有以下实现。
@Transactional
public void saveAndGenerateResult(Data data) {
saveDataInTableA(data.someAmountForA);
saveDataInTableB(data.someAmountForB);
callAnAggregatedFunction(data);
}
public void saveDataInTableA(DataA a) {
tableARepository.saveAndFlush(a);
}
public void saveDataInTableA(DataB b) {
tableBRepository.saveAndFlush(b);
}
public void callAnAggregatedFunction() {
// Do something based on the data saved from the beginning in Table A and Table B
}
使用saveAndFlush 使callAnAggregatedFunction 函数可以立即使用数据以获取聚合结果并将其保存到另一个表中,这一点很重要。这就是为什么我不使用save 函数,据我所知,它不会立即将事务刷新到数据库中。
但是,我在函数 saveAndGenerateResult 上使用了 @Transactional 注释,因为我想回滚我在该函数中完成的数据库事务,以防发生任何故障,这通常通过使用 @Transactional 来确保方法上的注释。
在这种特定情况下会发生什么情况?我正在使用saveAndFlush,它将数据立即刷新到数据库表中,如果最后一个函数(即callAnAggregatedFunction)无法将数据写入表中,表A和表B中的先前写入操作会回滚吗?
【问题讨论】:
-
那里的答案很有帮助@AtaurRahmanMunna。表示感谢。 :)
-
我的荣幸。 :)
标签: java hibernate spring-boot spring-data-jpa transactional