2015-12-15 6 views
1

Доброе утро,Hibernate uniqueResult имеет нулевое значение, но оно не должно

Я пытаюсь к следующей вещи:

Перед обновлением объекта, я хочу, чтобы получить поле из последней записи в добавьте его в новую строку. Так это то, что я сделал

int idLuce = Integer.parseInt(msg); 
Illuminazione illuminazione = new Illuminazione(); 
session.beginTransaction(); 
selectQuery = "SELECT dateTime from Illuminazione i where i.idLuce = :idLuce ORDER BY i.dateTime ASC"; 
theQuery = session.createQuery(selectQuery).setProperties(illuminazione).setFirstResult(0) 
.setMaxResults(1); 
lastDate = (Date) theQuery.uniqueResult(); 
logger.debug("last date time is: "+lastDate); 
illuminazione.setLastDateTime(lastDate); 
illuminazione.setIdLuce(idLuce); 
illuminazione.setIsLit(true); 
Date date = new Date(); 
illuminazione.setDateTime(new Timestamp(date.getTime())); 
session.save(illuminazione); 
session.getTransaction().commit(); 

все работает, как я ожидал, но lastDate равно нулю ... Я не получаю никаких ошибок или исключений, это журнал операции ..

2015-12-15 10:30:01.157 DEBUG [Thread-2]: HQL: SELECT dateTime from it.besmart.models.Illuminazione i where i.idLuce = :idLuce ORDER BY i.dateTime ASC 
2015-12-15 10:30:01.159 DEBUG [Thread-2]: SQL: select illuminazi0_.date_time as col_0_0_ from SMARTPARK.illuminazione illuminazi0_ where illuminazi0_.id_luce=? order by illuminazi0_.date_time ASC 
2015-12-15 10:30:01.161 DEBUG [Thread-2]: throwQueryException() : no errors 

Hibernate: 
    select 
     illuminazi0_.date_time as col_0_0_ 
    from 
     SMARTPARK.illuminazione illuminazi0_ 
    where 
     illuminazi0_.id_luce=? 
    order by 
     illuminazi0_.date_time ASC limit ? 
2015-12-15 10:30:01.187 DEBUG [Thread-2]: last date time is: null 

2015-12-15 10:30:01.285 DEBUG [Thread-2]: Executing identity-insert immediately 
2015-12-15 10:30:01.314 DEBUG [Thread-2]: 
    insert 
    into 
     SMARTPARK.illuminazione 
     (date_time, id_luce, isLit, last_date_time) 
    values 
     (?, ?, ?, ?) 
Hibernate: 
    insert 
    into 
     SMARTPARK.illuminazione 
     (date_time, id_luce, isLit, last_date_time) 
    values 
     (?, ?, ?, ?) 

Очевидно если я запускаю тот же запрос в SQL, он работает ...

Что я делаю неправильно? Спасибо

ответ

1

Вы, кажется, не прошли idLuce в запрос. Попробуйте

int idLuce = Integer.parseInt(msg); 
session.beginTransaction(); 
selectQuery = "SELECT dateTime from Illuminazione i where i.idLuce = :idLuce ORDER BY i.dateTime ASC"; 
theQuery = session.createQuery(selectQuery).setParameter("idLuce", idLuce).setMaxResults(1); 
lastDate = (Date) theQuery.uniqueResult(); 

Или переместить illuminazione.setIdLuce(idLuce); строку перед выполнением запроса.

+0

вы правы, я решил ее использовать setParameter, а не setProperties, даже если я не знаю, почему ... спасибо – besmart

+1

'setProperties()' использует свойства bean для сопоставления их с запросом параметры. Во время выполнения запроса 'illuminazione.idLuce' имеет значение null, поэтому запрос не возвращает никаких результатов. Если вы переместили 'illuminazione.setIdLuce (idLuce);' перед выполнением запроса будет работать ваш старый код. –

0

Я не могу комментировать, поэтому я отправляю это как ответ, ли idLuce содержит допустимое значение, которое вы хотите?

+0

Да, у меня есть, я запишу его позже в скрипте и когда я выполняю session.save (illuminazione); правильная строка вставлена, только last_date_time NULL – besmart

Смежные вопросы