JDBCExceptionReporter - несовместимые типы данных в сочетании - PullRequest
1 голос
/ 11 ноября 2011

Я получаю сообщение об ошибке «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();
}

идентификатор датчика и датчик считывания - все целые числа, а остальные соединения - даты. Есть идеи, почему я могу получить это?

Ответы [ 2 ]

2 голосов
/ 11 ноября 2011

Если sensorId является целым числом, HQL должен быть таким, как показано ниже

for(int sensId:sensorIds){
      //  sb.append("'");
        sb.append(sensId);
       // sb.append("',");
       sb.append(",");
}

В любом запросе будет SQL or HQL, целые числа не должны быть внутри quotes(')

in (1,2,3) -- For the integers

in ('a','b','c') -- For the char types
1 голос
/ 11 ноября 2011

Хлоп!Проблема заключалась в кавычках вокруг идентификаторов в списке.

Почему гибернация не справляется с этим должным образом?

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