JPQL时间间隔

时间:2011-12-04 18:26:51

标签: java mysql datetime date subtraction

我想要做的事情在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 个答案:

答案 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那里获得建议,并将其从编号参数更改为命名参数。