Не удалось преобразовать значение свойства типа 'net.sourceforge.jtds.jdbc.ClobImpl' в требуемый тип 'java.lang.String' - PullRequest
0 голосов
/ 23 октября 2018

У меня есть одна таблица на сервере sql с одним полем annoation в качестве текстового типа данных.

Я использовал шаблон Spring JDBC для получения данных текстового поля аннотации, а затем я использовалСледующий API ( BaseRowMapper ) для сопоставления столбца таблицы с Java Pojo.enter image description here

ниже моя структура таблицы:

enter image description here

При получении данных я получаю ниже исключения.

org.springframework.beans.ConversionNotSupportedException: Failed to convert property value of type 'net.sourceforge.jtds.jdbc.ClobImpl' to required type 'java.lang.String' for property 'annotation'; nested exception is java.lang.IllegalStateException: Cannot convert value of type [net.sourceforge.jtds.jdbc.ClobImpl] to required type [java.lang.String] for property 'annotation': no matching editors or conversion strategy found
    at org.springframework.beans.BeanWrapperImpl.convertIfNecessary(BeanWrapperImpl.java:464)
    at org.springframework.beans.BeanWrapperImpl.convertForProperty(BeanWrapperImpl.java:495)
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:1099)
    at org.springframework.beans.BeanWrapperImpl.setPropertyValue(BeanWrapperImpl.java:884)
    at com.ecw.vascular.model.BaseRowMapper.mapRow(BaseRowMapper.java:39)
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:92)
    at org.springframework.jdbc.core.RowMapperResultSetExtractor.extractData(RowMapperResultSetExtractor.java:60)
    at org.springframework.jdbc.core.JdbcTemplate$1.doInPreparedStatement(JdbcTemplate.java:651)
    at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:589)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:639)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:664)
    at org.springframework.jdbc.core.JdbcTemplate.query(JdbcTemplate.java:704)
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.query(NamedParameterJdbcTemplate.java:179)
    at org.springframework.jdbc.core.namedparam.NamedParameterJdbcTemplate.query(NamedParameterJdbcTemplate.java:185)
    at com.ecw.vascular.dao.BaseDao.executeQuery(BaseDao.java:113)
    at com.ecw.vascular.dao.ObservationDao.findByPatientAndEncounter(ObservationDao.java:64)

1 Ответ

0 голосов
/ 04 ноября 2018

Проблема заключается в типе данных, используемом в базе данных SQL Server для хранения строки длиной не более 16 байт.

Текст может хранить до 2 ГБ данных символьных строк переменной ширины, поэтому JDBCTemplate использует CLOB для извлечения данных из этого столбца.

Поскольку максимальная длина равна 16, одно решение может бытьчтобы изменить тип данных в базе данных на более подходящий varchar.

Если это не вариант, и поскольку в ошибке упоминается реализация CLOB для jtds, вы можете попытаться изменить строку соединения jdbc на

jdbc:jtds:sqlserver://ServerName;**useLOBs=false**;DatabaseName=xxx;instance=xxx

Третий, крайне не рекомендуемый, вариант - это использование CLOB вместо String внутри Java-бина со всеми относительными изменениями, необходимыми для работы с объектами LOB баз данных.

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