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 Core や MVC などの他の Spring モジュールに依存しないバージョンが必要であることに注意してください。前もって感謝します。

4

2 に答える 2

3

自動コミットを使用したくない場合はPlatformTransactionManager、Spring 構成で をセットアップする必要があります。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トランザクション コンテキストで呼び出す必要があるメソッドです。

于 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 に答える