2011-07-13 57 views
0

構建的病情,我有以下查詢:與日期JPA2類型安全查詢

SELECT DISTINCT * 
FROM Projekt p 
WHERE p.bewilligungsdatum = to_date('01-07-2000', 'dd-mm-yyyy') 

,但我有問題建立的條件。在這裏我的代碼:

condition = criteriaBuilder.equal((Expression<String>) projekt.get(criterion), "to_date('" + projektSearchField + "', 'dd-mm-yyyy')"); 

此產生以下:

SELECT DISTINCT * 
FROM Projekt p 
WHERE p.bewilligungsdatum = 'to_date('01-07-2000', 'dd-mm-yyyy')' 

和ufcorse不起作用。我應該使用哪種方法進行日期比較(或者如何去除模式部分中的外部字符')?

回答

0

你爲什麼不嘗試使用這樣的參數。然後,您可以在java中執行String-> Date轉換,並將實際的java.util.Date傳遞到數據庫。

EntityManager em; // initialized somewhere 
Date datum; // initialized somewhere 

... 

String queryString = "SELECT p " 
      + "FROM Projekt p" 
      + "WHERE p.bewilligungsdatum = :datum"; 

Query query = em.createQuery(queryString) 

query.setParameter("datum", datum); 

List<Projekt> projekte = query.getResultList(); 

這是因爲你不使用特定to_date功能

vieleGrüßeAUS不來梅留DB獨立的方式; O)

+0

的區別一試,我使用CriteriaQuery中,而不是查詢。我沒有查詢字符串或類似;)看到類似的查詢在這裏:http://stackoverflow.com/questions/6660819/set-selection-of-typesafe-jpa-2-query-with-joins – cupakob

0

這應該工作過,通過傳遞一個日期作爲參數的限制

Date datum; // initialized somewhere 

CriteriaQuery query = ... 

query.add(Restrictions.eq("bewilligungsdatum ", datum); 

... 
+0

nope,沒有添加方法CriteriaQuery ... – cupakob

0

對不起。我想到了休眠CriteriaQuery

然後通過CriteriaBuilder財產以後嘗試這樣

Date datum; // initialized somewhere 

... 

final CriteriaQuery<Projekt> query = criteriaBuilder.createQuery(Projekt.class); 
final Root<Projekt> projekt = query.from(Projekt.class); 

Predicate condition = criteriaBuilder.equals(projekt.get("bewilligungsdatum"),datum); 
query.where(condition) 

之前我沒有用這個,所以對自己的

+0

在數據庫中我們有一個時間戳...「星期六7月01日00:00:00 CEST 2000」。如果用戶輸入「01-07-2009」,會發生什麼? – cupakob

+0

這只是一個字符串表示。確保將GUI中輸入的日期轉換爲真正的java.util.Date對象。 JPA應該處理其餘的部分。 – powerMicha