JDBCExceptionReporter — несовместимые типы данных в сочетании

#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 не справляется с этим должным образом?