2015-02-23 104 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();