#java #hibernate #spring
#java #переход в спящий режим #spring
Вопрос:
Я получаю ошибку «JDBCExceptionReporter — несовместимые типы данных в сочетании» при запуске следующего кода:
public Collection<SensorReading> getLastReadings(int[] sensorIds)
throws DataAccessException {
StringBuilder sb = new StringBuilder();
sb.append("SELECT r ");
sb.append("FROM Sensor AS s, SensorReading AS r ");
sb.append("WHERE s.id IN (");
for(int sensId:sensorIds){
sb.append("'");
sb.append(sensId);
sb.append("',");
}
//strip off the last comma
sb.setLength(sb.length() -1);
//build the rest of the query
sb.append(") AND s.id = r.sensorId ");
sb.append(" AND r.readingTimestampUtc >= s.lastBeaconUtc ");
List<SensorReading> readings = getHibernateTemplate().find(sb.toString());
//map to hold only the latest result
Map<Integer, SensorReading> readingsMap = new HashMap<Integer, SensorReading>();
//flash through the readings and make sure there's only one per sensor ID
for(SensorReading rdg:readings){
Integer sensorId = rdg.getSensorId();
SensorReading reading = readingsMap.get(sensorId);
if(reading==null){
readingsMap.put(sensorId, rdg);
}
else{
//replace if the new reading is later
if(reading.getReadingTimestampUtc().after(rdg.getReadingTimestampUtc())){
readingsMap.put(sensorId, reading);
}
}
}
return readingsMap.values();
}
идентификатор датчика и sensorreading sensorid — это все целые числа, а остальные объединения — даты. Есть идеи, почему я мог бы это получить?
Комментарии:
1. Что вы имеете в виду, когда говорите «вышеупомянутая ошибка»?
Ответ №1:
Если sensorId
является целым числом, HQL должен быть таким, как показано ниже
for(int sensId:sensorIds){
// sb.append("'");
sb.append(sensId);
// sb.append("',");
sb.append(",");
}
В любом запросе be SQL or HQL
целые числа не должны находиться внутри quotes(')
in (1,2,3) -- For the integers
in ('a','b','c') -- For the char types
Ответ №2:
Ого! Проблема заключалась в кавычках вокруг идентификаторов в списке.
Почему hibernate не справляется с этим должным образом?