如何与JPA查询进行时间戳比较?

2024-03-21

我们需要确保 JPQL 查询仅返回最近 30 天内的结果。示例如下:

Date now = new Date();
Timestamp thirtyDaysAgo = new Timestamp(now.getTime() - 86400000*30);

Query query = em.createQuery(
  "SELECT msg FROM Message msg "+
  "WHERE msg.targetTime < CURRENT_TIMESTAMP AND msg.targetTime > {ts, '"+thirtyDaysAgo+"'}");
List result = query.getResultList();

这是我们收到的错误:


<openjpa-1.2.3-SNAPSHOT-r422266:907835 nonfatal user error> org.apache.openjpa.persistence.ArgumentException: An error occurred while parsing the query filter 'SELECT msg FROM BroadcastMessage msg WHERE msg.targetTime < CURRENT_TIMESTAMP AND msg.targetTime > {ts, '2010-04-18 04:15:37.827'}'. Error message: org.apache.openjpa.kernel.jpql.TokenMgrError: Lexical error at line 1, column 217.  Encountered: "{" (123), after : ""  

Help!


所以你输入的查询不是JPQL(你可以通过参考JPA规范看到)。如果要将字段与日期进行比较,则将日期作为参数输入到查询中

msg.targetTime < CURRENT_TIMESTAMP AND msg.targetTime > :param

这不是 SQL。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何与JPA查询进行时间戳比较? 的相关文章

随机推荐