2017-06-01 4 views
0

データベーステーブルに新しい行を挿入した後、生成されたKeyを取得しようとしています。私はKeyHolderPreparedStatementでこれを達成したが、この例外を取得しようとしました:SpringでSQL挿入後に生成されたキーを取得するJDBC

org.springframework.dao.DataRetrievalFailureException:
生成されたキーがサポートされ、数値型ではありません。

[java.lang.Number型]に[は、oracle.sql.ROWID]キャスト
できません。だから、私が達成したいものではありませんこれは、行IDを返しJDBCTemplateの更新方法のように思えます。表は、配列を使用して新しい行が挿入されるたびに新しい値を生成するトリガを使用

String sql = Sql.CREATE_VORGANG; 
final KeyHolder holder = new GeneratedKeyHolder(); 

jdbcTemplate.update(new PreparedStatementCreator() {   

    @Override 
    public PreparedStatement createPreparedStatement(Connection connection) 
       throws SQLException { 
    PreparedStatement ps = connection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 
    ps.setString(1, fuehrungskraftPersonalnummer); 
    ps.setString(2, mitarbeiterPersonalnummer); 
    ps.setString(3, statusId); 
    return ps; 
    } 
}, holder); 

:ここで私はこれを行うために書いたコードです。その値は、テーブルの列ID_VORGANGに挿入されます。

私はここで何かが分かりませんか?

EDIT: 実行されたSQL文:

Insert into TRAL_VORGANG (FK_PERSONALNUMMER, MA_PERSONALNUMMER, STATUS_ID) values (?, ?, ?) 
+1

は、SQL文を追加します。 –

+0

@Rene残念ながら、それはこの質問の重複ではありません。この質問にはspring-jdbcの機能が含まれています。また、Oracleに適用されたときの '通常の' JDBCの方法では、実際に生成されたIDではなくROWIDが返されるという特定の問題があります。 –

答えて

0

ここにある:

long id = holder.getKey().longValue(); 
関連する問題