2016-04-20 3 views
0

私は春のフレームワークを使用しており、さらに処理するために必要なIDを持つためにDBに行を挿入したいと考えています。 クエリーの挿入は以下の通りですが、パラメータなしの簡単なクエリーです。しかし、さらに悪いことに、executeAndReturnKeySimpleJdbcInsertから使用して現用通話を構築する方法がありますか?これは挿入用のSQL照会です。しかし、私はそれがsimpleJdbcInsertインスタンス内で使用できるかどうかわかりません。春にDBに行を挿入する方法、自動生成された値のみを使用してIDを返す方法はありますか?

insert into sdc_import_run(id_import_run, create_date) 
values(nextval('seq_import_run'),now()) 

私はそれが動作しない

Number genId = simpleJdbcInsert.withTableName("sdc_import_run") 
      .usingGeneratedKeyColumns("id_import_run") 
      .executeAndReturnKey(new MapSqlParameterSource()); 

を試してみましたが、事は、彼らがテーブルのすべてのパラメータをしたいが、私はそれらのいずれかをたくない、私は唯一の自動生成を挿入したい、です:id_import_run(主キー)とcreate_dateです。その結果、私は変数に挿入されたIDを持っています。あなたはどうしますか?

編集 このようなアプローチはうまくいきます。

public Integer persistInsertImportRunForId(){ 
    String queryString = getSql("insertImportRunForId"); 
    KeyHolder holder = new GeneratedKeyHolder(); 
    jdbcTemplate.update(con -> { 
      return con.prepareStatement(queryString, Statement.RETURN_GENERATED_KEYS); 
     }, holder 
    ); 

    return CommonUtils.tryOrGet(() -> holder.getKeys().get("id_import_run"), null); 
} 

答えて

1

JdbcTemplateを使用して完全な挿入SQLを実行できます。テーブルのDDLが許可するように、挿入用に定義されたカラムの数を少なくして、ここで希望するSQLを提供できます。

This answerはこれをより詳細にカバーしています。