Spring の NamedParameterJdbcTemplate と GeneratedKeyHolder を使用して、ROWID または主キーを抽出しようとしています。
私はこのようなことをしようとしています。
MapSqlParameterSource parameters = new MapSqlParameterSource()
.addValue("param1", value1)
.addValue("param2", value2);
KeyHolder keyHolder = new GeneratedKeyHolder();
namedParameterJdbcTemplate.update("INSERT INTO TABLE(ID, col1, col2)"
+ "VALUES(TABLE.TABLE_SEQ.NEXTVAL, :param1, :param2)",
parameters, keyHolder);
上記のクエリを実行しようとするとkeyHolder.getKey().longValue()
、以下の例外がスローされます。
HTTP Status 500 - Request processing failed; nested exception is org.springframework.dao.DataRetrievalFailureException: The generated key is not of a supported numeric type. Unable to cast [oracle.sql.ROWID] to [java.lang.Number]
このhttp://docs.oracle.com/cd/B28359_01/java.111/b31224/datacc.htmを調べたとき、ojdbcがoracle RowIdをJava RowIdにマッピングしていないことを理解しました(理解できたと思います)。
キーを抽出する方法はありますか?(はい、PreparedStatement を使用して実行できますが、一部の条件でコードを読み取ったり操作したりするのが少し見苦しくなります)。あなたの提案は大歓迎です。