Я думаю, что это виновник вашей проблемы.
the column dow is of type varchar(1)
Varchar должен вернуть строковый результат для этого поля. Но я обнаружил, что у hibernate есть некоторая проблема: когда varchar содержит один символ, результат будет преобразован в тип данных char / Character в вашем Java. Посмотрите на эти проблемы, HHH-2220 , HHH-2304 и другие с той же проблемой. Здесь указано здесь , и я цитирую
В настоящее время Hibernate поддерживает своего рода отображение "automagi c" из типов SQL в типы Hibernate / Java - потому что из многих двусмысленностей, возникающих при таком отображении, оно иногда не будет соответствовать тому, что вы на самом деле хотите.
Предложение: Поскольку вы действительно ожидаете Символ из-за приведенного выше кода и проблемы, Вы должны исправить проблему типа данных в вашей базе данных и Java. Вы можете окончательно преобразовать свою базу данных в правильный тип данных (целое число, если оно действительно находится в диапазоне от 0 до 9). Или, если вы не можете изменить базу данных, вы можете сделать это, создав вспомогательный класс / метод для ручного анализа каждого результата в Integer, например, используя метод, подобный следующему:
/**
* You parser method of Character to Integer
*/
public List<Integer> converToIngeter(List resultList){//This should accept your resultSet from your query as List
List<Integer> toReturn = new ArrayList<>();
resultList.stream().forEach((o)->{
if(Character.isDigit((Character) o)){//(Character) o) is just an insurance that the instance is Character
toReturn.add(Character.getNumericValue((Character)o));
}
});
/* Or you do some other parsing
*/
return toReturn;
}
В вашем коде
List<Integer> getDowByTrmClassId(Integer trmClassId){
. . . //Your other code here
sqlQuery.setParameter("trmClassId", trmClassId);
List<Integer> classDows = converToIngeter(sqlQuery.list()); //converToIngeter(list) was added to convert the result to Integer
return classDows;
}
Вы можете посмотреть другой символ на целочисленный синтаксический анализ, например здесь в inte rnet.
Или Исправить проблему с типом данных при возвращении Varchar в качестве символов на Java, Этот ответ предлагает добавить .addScalar("PREFIX", Hibernate.STRING);
к вашему запросу. Например,
sqlQuery.setParameter("trmClassId", trmClassId);
sqlQuery.addScalar("PREFIX", Hibernate.STRING);
Затем, позже, проанализируйте их в Integer.
==============
ОБНОВЛЕНИЕ :
Удалить несвязанный ответ. Спасибо тебе, Андреас, за то, что указал на некоторые из них, которыми я пренебрегал.