sergクンツ:
私は、次のコードを持っています:
@Service
public class ItemService {
...
public void addItems(@Nonnull DocumentDTO dto) throws Exception {
// some code that takes some time to process
...
addItems(dto.getDocId(), items);
}
@Transactional
public void addItems(long docId, @Nonnull List<Item> items) {
itemDao.addItems(docId, items);
}
}
最初の方法は@Transactionalではありません、それは@Transactionalを有する第二1を呼び出します。@Transactional「値『』の方法は、互換性のない同じクラスのメソッドを呼び出してはいけません」というSonarLintツールの状態(https://rules.sonarsource.com/java/RSPEC-2229)
しかし、このコードは、春4.3.20で正しく動作します。この規則は、春4.3.20の実際のですか?
PSの興味深い、私はパッケージプライベートとして第2の方法を行った場合、SonarLint警告が消える...なぜ?
ケンちゃん
しかし、このコードは、春4.3.20で正しく動作します。この規則は、春4.3.20の実際のですか?
はい。SonarLintは正しいです。自己呼び出しは作ることができない@Transactional
を有効にします。これは、(参照春AOPがどのように働くかであることも、春5に変更されませんドキュメント)。あなたのコードは、おそらくあなたは別のトランザクションの内部を開始するために動作itemDao
します(別のしているかもしれませ@Transactional
にマークItemDao#addItems()
)。
私はパッケージプライベートとして第二の方法を作る場合、SonarLintの警告は消え...なぜ?
なぜ知ってはいけません。多分それはバグです。この中で述べたように、ルール、それは時にマーク警告与える必要@Transactional
プライベートメソッドインチ