开始一个仅用于保存的交易

Start a transaction for saving only

我想知道在以下情况下推荐的处理方式是什么:

所以它会是这样的:

@Service
public class ReportService {

    public void generateReport() {

        var entities = entityRepository.findEntities();

        var file = getReportData(entities);

        var url = uploadFile(file);
        
        sendEmail(url);

        // If something goes wrong while save on entity, roll back everything
        for (var e : entities) {
           entityRepository.save(e);
        }
    }
}

所以我知道我有的选择是:

我想知道这些是否是我们处理 Spring 数据的解决方案,或者是否有一种简单的方法可以执行以下操作:

        // ...
        sendEmail(url);

        // If something goes wrong while save on entity, roll back everything
        database.beginTransaction();
        for (var e : entities) {
           entityRepository.save(e);
        }
        database.commit();

我知道我们有这种控制,直接使用 EntityManager,但我不能将它与 Spring 数据的存储库方法混合......我可以吗?

您要找的是 TransactionTemplate

@Autowired
TransactionTemplate tx;

// ...

    tx.execute(__ -> {
        for (var e : entities) {
           entityRepository.save(e);
        }
    }

我同意@crizzis 的评论,即设计似乎有些错误,但我认为这与问题无关。