JDBC RowMapper и Casts - PullRequest
       1

JDBC RowMapper и Casts

0 голосов
/ 12 сентября 2011

У меня проблема с использованием RowMappers с JDBC (особенно ParameterizedSingleColumnRowMapper):

Я запрашиваю список существующих идентификаторов из базы данных со следующими данными:

List<Long> existingIds = DS.getJdbcTemplate().query(sql,
                         new ParameterizedSingleColumnRowMapper<Long>());

Толькопроблема в том, что мой список иногда не содержит длинных, как ожидалось:

// for some value...
System.out.println(existingIds.get(0) instanceof Long); // return FALSE
System.out.println((Object)existingIds.get(0) instanceof Integer); // return TRUE

Я мог бы просто пройти через existingIds и преобразовать значения в long, но я ожидал, что это сделает маппер строк (ядумаю, ParameterizedSingleColumnRowMapper использует getLong или что-то в этом роде и обычно пытается привести к желаемому значению).

У вас есть какие-либо объяснения или идеи для решения этой проблемы?

Спасибо зазаранее за вашу помощь.

1 Ответ

2 голосов
/ 12 сентября 2011

Вам нужно сделать ParameterizedSingleColumnRowMapper.newInstance(Long.class).Просто создание нового экземпляра напрямую означает, что он не знает тип правильно (он не может вывести его из обобщенных типов, потому что они стираются во время компиляции), поэтому он, вероятно, просто делает .getObject(), что будет зависеть от JDBCводитель.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...