2015-02-23 72 views
0

我想从某个日期早于7天的数据库中选择所有入口。它通过SQLyog的工作正常,但在Java总是抛出这个错误:Java JPA查询

[33, 76] The expression is not a valid conditional expression. 
[76, 101] The query contains a malformed ending. 

这是我在Java中查询:

SELECT a FROM Applicants a WHERE (a.lastMod <= CURRENT_DATE - INTERVAL 7 DAY) ORDER BY a.applDate ASC 

可能的问题是 “CURRENT_DATE” -part?

回答

2

CURRENT_DATE没问题,但INTERVAL 7 DAY不是有效的JPQL表达式。你需要提供日期作为参数

WHERE a.lastMod <= :dateParam 

例子:

Query q = em.createQuery("SELECT a FROM Applicants a WHERE a.lastMod <= :dateParam ORDER BY a.applDate ASC"); 
q.setParameter("dateParam", dateParam); 
List<Applicants> applicants = (List<Applicants>)q.getResultList(); 

// or, to avoid casting (thanks to @DavidSN) 

TypedQuery<Applicants> q = em.createQuery("SELECT a FROM Applicants a WHERE a.lastMod <= :dateParam ORDER BY a.applDate ASC", Applicants.class); 
q.setParameter("dateParam", dateParam); 
List<Applicants> applicants = q.getResultList(); 
+0

我从来不带参数的工作。你能提供一个例子吗? – 2015-02-23 12:10:08

+0

当然,我已经编辑了我的答案。 – 2015-02-23 12:15:11

+0

该示例会生成未经检查的强制转换警告。您可以选择使用类型安全版本的'createQuery'方法:'TypedQuery q = em.createQuery(“select ...”,Applicants.class);'并且获得没有列表的结果 cast:'List 申请人= q.getResultList();' – 2015-02-23 12:29:16

0
EntityManager em = ... 
Query q = em.createQuery ("SELECT a FROM Applicants a WHERE a.lastMod <= :dateParam"); 
q.setParameter("dateParam" , dateParam); 
List<blabla> results = q.getResultList();