Spring-JDBC batchUpdate不提交更改。这是一个knwon bug吗?

时间:2014-06-09 19:06:41

标签: java spring commit spring-jdbc batch-updates

我正在处理的项目使用了依赖

<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-jdbc</artifactId>
    <version>3.2.0.RELEASE</version>
 </dependency>

有了这个,我正在进行方法调用(1)

template.batchUpdate(INSERT_SQL, instance of BatchPreparedStatementSetter);

看看Spring JDBCTemplate中的源代码,似乎(因为驱动程序支持 批量更新) PreparedStatement 上的 executeBatch()被调用。但是,我没有在数据库中看到更新的影响。

这是一个真正的错误还是我错过了明显的错误?如果这已经解决,请告知好的版本。 请注意我需要一个不依赖于Spring Core或MVC等其他Spring模块的版本。提前致谢。

2 个答案:

答案 0 :(得分:3)

如果您不想使用自动提交,则必须在Spring配置中设置PlatformTransactionManager。对于简单的JDBC使用,您可以使用DataSourceTransationManager

在Web应用程序中,通常在服务层中使用@Transactional注释。在一个简单的应用程序中,Spring提出了TransactionTemplate。以下是Spring Reference Manual 3.2

中的示例
public class SimpleService implements Service {

  // single TransactionTemplate shared amongst all methods in this instance
  private final TransactionTemplate transactionTemplate;

  // use constructor-injection to supply the PlatformTransactionManager
  public SimpleService(PlatformTransactionManager transactionManager) {
    Assert.notNull(transactionManager, "The 'transactionManager' argument must not be null.");
    this.transactionTemplate = new TransactionTemplate(transactionManager);
  }

  public Object someServiceMethod() {
    return transactionTemplate.execute(new TransactionCallback() {

      // the code in this method executes in a transactional context
      public Object doInTransaction(TransactionStatus status) {
        updateOperation1();
        return resultOfUpdateOperation2();
      }
    });
  }
}

updateOperation是必须在事务上下文中调用的方法。

答案 1 :(得分:1)

1)您的交易管理设置/配置是什么? 2)您如何开始并提交交易?你有什么方法调用的@Transactional注释吗? E.g。

@org.springframework.transaction.annotation.Transactional
public void doUpdate() {
  // jdbc template calls go here...
}