JdbcTemplate 可以共用一个事务吗?

Can JdbcTemplate Share a Common Transaction?

所以我最初发布了一个问题 关于我在混合 JDBC Templates/JPA 时遇到的问题。

不过我现在想知道是否有可能在 JDBC 模板操作之间共享一个公共事务?

示例将在单独的事务中更新 table 'test'。

    @Autowired
    private NamedParameterJdbcTemplate namedParameterJdbcTemplate;

    public void storeDataInSingleTransaction(List<Test> testEntries) {
        namedParameterJdbcTemplate.update("DELETE FROM test", new HashMap<>());
        namedParameterJdbcTemplate.update("alter table test auto_increment = 1", new HashMap<>());

        String insertTestSQL = "INSERT INTO test VALUES (:id, :name, :value)";
        SqlParameterSource[] testBatch = SqlParameterSourceUtils.createBatch(testEntries.toArray());
        namedParameterJdbcTemplate.batchUpdate(insertTestSQL, testBatch);
    }

编辑 1:我已尝试使用事务注释手动创建 template/data 源,但对我来说没有成功。

    SingleConnectionDataSource dataSource = new SingleConnectionDataSource();

    dataSource.setDriverClassName("com.mysql.jdbc.Driver");
    dataSource.setUrl(url);
    dataSource.setUsername(user);
    dataSource.setPassword(password);

    NamedParameterJdbcTemplate namedParameterJdbcTemplate = new NamedParameterJdbcTemplate(dataSource);

通常在 Spring 中,当您从 @Transactional 方法调用您的方法时,它应该作为单个连接执行

It is not sufficient to tell you simply to annotate your classes with the @Transactional annotation, add @EnableTransactionManagement to your configuration

you should apply the @Transactional annotation only to methods with public visibility

此外,要使用相同的连接,您可以在上下文中将数据源设置为 SingleConnectionDataSource

wraps a single JDBC Connection which is not closed after use.