Когда вы делаете «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 и изменил его с нумерации на именованные параметры.