2017-06-01 60 views
0

我試圖在將新行插入到數據庫表後檢索生成的密鑰。我試圖用一個KeyHolderPreparedStatement來實現這一點,但得到這個異常:SQL插入Spring JDBC後獲取生成的密鑰

org.springframework.dao.DataRetrievalFailureException:
生成的關鍵是支持的數字類型的不行。
無法施放[oracle.sql.ROWID]至[java.lang.Number中]

所以它似乎像的JdbcTemplate的更新方法返回的行ID,這不是我想要的東西來實現。下面是我寫了這樣的代碼:

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中。

我在這裏錯過了一些明顯的東西嗎?

編輯: 所執行的SQL語句:

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

添加您的SQL語句。 –

+0

@Rene不幸的是,這不是這個問題的重複。這個問題涉及spring-jdbc功能,以及在Oracle上應用'正常'JDBC方式時返回ROWID而不是實際生成的標識的具體問題。 –

回答

0

這就是:

long id = holder.getKey().longValue();