Есть ли способ извлечь первичный ключ (или ROWID )с помощью NamedParameterJdbcTemplate и GeneratedKeyHolder?

Я пытаюсь извлечь 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, но это делает мой код немного неудобным для чтения и обработки при некоторых условиях ). Ваши предложения очень ценятся.

6
задан darwinbaisa 12 July 2012 в 11:37
поделиться