我想要做的事情在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]
有什么想法吗?
答案 0 :(得分:2)
当您执行“QueryText”+ cal.getTime()时,您告诉Java将cal.getTime()转换为String并将其附加到查询文本。您可以在异常中清楚地看到它,它提供了它尝试的查询......
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那里获得建议,并将其从编号参数更改为命名参数。