Интервал времени JPQL - PullRequest
1 голос
/ 04 декабря 2011

То, что я пытаюсь сделать, довольно просто в SQL, но я не могу заставить его работать с JPQL.

Проблема в том, что мои форматы дат не совпадают друг с другом.В моей базе данных дата хранится как 2011-12-04 18:19:00

То, что я пробовал:

    Calendar cal = Calendar.getInstance();
    cal.add(Calendar.SECOND, -GlobalConfig.heartbeatInterval);
    Query query = JPA.em().createQuery("select uo from UserOnline uo where lastActive < " + cal.getTime());

Но это дает мне эту ошибку: IllegalArgumentException occured : org.hibernate.hql.ast.QuerySyntaxException: unexpected token: Dec near line 1, column 60 [select uo from models.UserOnline uo where lastActive < Sun Dec 04 19:22:17 CET 2011]

Есть идеи?

1 Ответ

2 голосов
/ 04 декабря 2011

Когда вы делаете «QueryText» + cal.getTime (), вы говорите Java преобразовать cal.getTime () в строку и добавить его в текст запроса. Вы можете видеть это ясно в исключении, он предоставил запрос, который попытался ...

select uo from models.UserOnline uo where lastActive < Sun Dec 04 19:22:17 CET 2011

См? «Sun Dec 04 19:22:17 CET 2011» - это просто набор текста, и механизм запросов Hibernate не знает, как его проанализировать.

Я бы немного изменил ваш запрос, чтобы получить аргумент, который является временем ...

Query query = JPA.em().createQuery("select uo from UserOnline uo where lastActive < :lastActive");
query.setParameter("lastActive", cal.getTime());

РЕДАКТИРОВАТЬ : взял совет от JB Nizet и изменил его с нумерации на именованные параметры.

...