2014-12-11 98 views
0

如何在JPA的MySQL中查詢DateTime?之前的變量是以毫秒爲單位的Date()對象。我會做類似如下:Java中按日期查詢JPA

@Override 
@Transactional(readOnly = true) 
public List<Entry> findAllBefore(Long before, Integer nEntries) 
{ 

    CriteriaBuilder builder = this.getEntityManager().getCriteriaBuilder(); 
    CriteriaQuery<Entry> criteriaQuery = builder.createQuery(Entry.class); 

    Root root = criteriaQuery.from(Entry.class); 
    criteriaQuery.select(root); 

    // seems not to work 
    criteriaQuery.where(builder.lessThan(root.get("start") , before)); 

    TypedQuery<Entry> typedQuery = this.getEntityManager() 
    .createQuery(criteriaQuery) 
    .setMaxResults(nEntries) 

    return typedQuery.getResultList(); 
} 

我想有從相應的表所在的日期時間列的「開始」是「之前」變量值之前的所有條目。

+0

你需要的究竟是什麼? – ashokhein 2014-12-11 06:25:21

+0

我編輯了我的帖子。請看最後一句,請 – Xear 2014-12-11 07:14:14

+0

我想你必須把你的long轉換爲Date對象。 – Jens 2014-12-11 07:49:07

回答

0

你可以使用謂詞嗎? 也許在我的回覆中會出現編譯錯誤,因爲我現在不在我的電腦上,但使用它,它應該是非常簡單的找到你的方式。 首先在方法簽名中,我會傳遞一個日期(或者可能會將您的方法中的長整數轉換爲日期)。

你以後有個約會:

CriteriaBuilder builder = this.getEntityManager().getCriteriaBuilder(); 
CriteriaQuery<Entry> criteriaQuery = builder.createQuery(Entry.class); 
List<Predicate> predicates = new ArrayList<Predicate>(); 
ParameterExpression<Date> param = builder.parameter(Date.class, "start"); 
predicates.add(builder.lessThanOrEqualTo(root.get("beforeDate"), param)); criteriaQuery.select(customer) 
     .where(predicates.toArray(new Predicate[]{})); 
"EntityManagerVariableName".createQuery(cq).getResultList(); 
+1

這真的很有幫助。引導我聽到我的問題。當我有多個「where」語句時,我搞砸了。謝謝 – Xear 2014-12-11 17:59:14

+0

@Xear如果答案解決了問題,請投票。謝謝 – giannisapi 2014-12-12 07:55:50