gpt4 book ai didi

java - JdbcTemplate可以共享公共(public)事务吗?

转载 作者:太空宇宙 更新时间:2023-11-04 09:30:01 24 4
gpt4 key购买 nike

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

但是我现在想知道是否可以在 JDBC 模板操作之间共享公共(public)事务?

示例将在单独的事务中更新表“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:我尝试使用事务注释手动创建模板/数据源,但对我来说没有成功。

    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.

关于java - JdbcTemplate可以共享公共(public)事务吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57191546/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com