Я пытаюсь извлечь ROWID или первичный ключ, используя Spring NamedParameterJdbcTemplate и GeneratedKeyHolder.
Я пытаюсь сделать что-то вроде этого.
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 не сопоставляет RowId oracle с RowId java.
Может ли кто-нибудь предложить, есть ли способ извлечь ключ? (Да, это можно сделать с помощью PreparedStatement, но это делает мой код немного уродливым для чтения и обработки при некоторых условиях). Ваши предложения очень ценятся.