2011-03-18 89 views
29

我想將此SQL語句轉換爲JPQL等效項。JPQL在日期聲明之間選擇

SELECT * FROM events 
WHERE events_date BETWEEN '2011-01-01' AND '2011-03-31'; 

這正確地從表events檢索信息。

在我Events實體

@Column(name = "events_date") 
    @Temporal(TemporalType.DATE) 
    private Date eventsDate; 

到目前爲止,這是我,但它無法正常工作。

public List<Events> findAllEvents(Date startDate, Date endDate) {  
    List<Events> allEvents = entityManager.createQuery(
    "SELECT e FROM Events e WHERE t.eventsDate BETWEEN :startDate AND :endDate") 
    .setParameter("startDate", startDate, TemporalType.DATE) 
    .setParameter("endDate", endDate, TemporalType.DATE) 
    .getResultList(); 
    return allEvents ; 
} 

我在做什麼錯?謝謝。

回答

57

嘗試此查詢(用e.eventsDate替換t.eventsDate):

SELECT e FROM Events e WHERE e.eventsDate BETWEEN :startDate AND :endDate 
3
public List<Student> findStudentByReports(Date startDate, Date endDate) { 
    System.out.println("call findStudentMethd******************with this pattern" 
        + startDate 
        + endDate 
        + "*********************************************"); 

    return em 
      .createQuery(
        "' select attendence from Attendence attendence where attendence.admissionDate BETWEEN : startDate '' AND endDate ''" 
          + "'") 
      .setParameter("startDate", startDate, TemporalType.DATE) 
      .setParameter("endDate", endDate, TemporalType.DATE) 
      .getResultList(); 

} 
+0

我沒有得到這個查詢是如何從查詢有問題不同。另外,endDate之前不應該有:?爲什麼在startDate和end endDate之後有兩個單引號? – Ievgen 2015-04-01 08:32:09