我正在为声纳问题而苦苦挣扎 squid:S2229“方法不应调用具有不兼容的“ @Transactional”值的同类方法 “ 我不确定该如何解决。我应该在清洁方法之上添加@Transactional还是其他方法?甚至删除@Transactional注释。
@Override
public void clean(BooleanSupplier isInterrupted) {
...
while (shouldContinue(isInterrupted) && partitionsIterator.hasNext()) {
PartitionDeleteSql partition = partitionsIterator.next();
execute(partition);
}
}
@Transactional
public void execute(PartitionDeleteSql sql) {
...
getJdbcTemplate().execute(sql....());
getJdbcTemplate().execute(sql....());
getJdbcTemplate().execute(sql....());
}
答案 0 :(得分:1)
Sonar指出的问题是非事务方法clean
调用事务性execute
。因此,@Transactional
上的execute
注释将被忽略,并且该方法将不会在事务模式下执行。
您必须使用clean
注释@Transactional
方法或整个类。
另外,必须使用例如@Service
或@Copmonent
将类本身注册为Spring bean,否则将不会为此类创建代理包装器bean。
更多信息,请访问:Spring - @Transactional - What happens in background?