3

我正在从事的项目使用以下依赖项

<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 模块(例如 Spring Core 或 MVC)的版本。提前致谢。

4

2 回答 2

3

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

在 Web 应用程序中,通常@Transactional在服务层使用注解。在一个简单的应用程序中,Spring 提出了TransactionTemplate. 这是 Spring 参考手册 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是必须在事务上下文中调用的方法。

于 2014-06-11T14:56:19.607 回答
1

1)您的事务管理设置/配置是什么?2) 你如何开始和提交交易?您是否在任何方法调用周围都有 @Transactional 注释?例如

@org.springframework.transaction.annotation.Transactional
public void doUpdate() {
  // jdbc template calls go here...
}
于 2014-06-10T22:12:10.280 回答