前言:在运行合计总分的时候发现插入数据,马上查询不到。
猜测:事务原因,插入,查询一个事务造成
排查:去除事务,还是不行。网上查询资料
方案:事务顺序,插入后马上提交事务,后查询
使用的方法:TransactionSynchronizationAdapter
代码示例:
this.save(conductAppraise);
TransactionSynchronizationManager.registerSynchronization(new TransactionSynchronizationAdapter() {
// 在事务提交之后执行的代码块(方法) 此处使用TransactionSynchronizationAdapter,其实在Spring5后直接使用接口也很方便了~
@Override
public void afterCommit() {
//判断总分是否超过一百
Integer score = conductAppraiseService.sumScore();
if (score > 100) {
throw new MyZyscException("总分超过一百,请调整分值。");
}
}
});
后续:发现是sql有问题,数据库字段中没有标记打分类型,导致数据是null,奇怪的是java运行查询是可以查到这个数据的,mysql是查询不到了。正常应该是查不到。后面加上数据默认值就没问题了。
补充事务的传递性。
@Transactional(propagation = Propagation.REQUIRES_NEW ,rollbackFor = Exception.class)
@GlobalTransactional