2011-03-24 79 views
0

我想創建一個查詢,該查詢將基於createDate字段落在表示日期的傳遞字符串之後而返回一個Person對象列表。使用日期列的HQL查詢

我CREATEDATE領域是這樣映射在我的Person類

@Basic(optional = false) 
@Column(name = "CREATE_DATE") 
@Temporal(TemporalType.DATE) 
private Date createDate; 

我的功能,找到所有的人結果的日期看起來像這樣之後。

public List<Person> searchDate(String startDate) { 

    Session session = getSessionFactory().openSession(); 

    String s_query = "FROM Person as p WHERE p.createDate >= :date"; 
    Query query; 
    DateFormat df = new SimpleDateFormat('dd-MMM-yy'); 

    try { 
     Date dt = df.parse(startDate); 
     query = session.createQuery(s_query).setDate("date", dt); 

    } catch(ParseException e){} 

    return (List<Person>)query.list(); 

} 
+1

您能否請張貼錯誤? – dseibert 2011-03-24 19:10:10

+0

@ client09,沒有錯誤,它只是不返回正確的列表,它實際上沒有找到任何東西。它應該找到一個值,我已經在SQL開發人員測試了查詢,以確保應該返回一個值 – medium 2011-03-24 21:50:14

+0

也許你想實際捕獲ParseException並將某些內容打印到日誌中? – mindas 2011-03-24 21:58:39

回答

2

我沒有看到任何問題。代碼應該工作。你可以嘗試這個作爲替代。

public List<Person> searchDate(String startDate) { 
    Calendar cal = Calendar.getInstance(); 
    cal.set(year, month-1, day); 
    Date createDate = cal.getTime(); 
    Session session = getSessionFactory().openSession(); 
    Criteria criteria = session.createCriteria(Person.class); 
    criteria.add(Restrictions.eq("createDate", createDate)); 
    return criteria.list();; 
} 

我希望這會有所幫助。如果在這裏討論有什麼問題,因爲討論是一種學習方式。

+0

感謝您的幫助。我解決了這個問題,實際上我的日期格式錯了,數據庫需要'yyyy-MM-dd'。愚蠢的錯誤,但我是冬眠新手,所以我認爲這是罪魁禍首。再次感謝 – medium 2011-03-25 11:08:38

+1

,它不值得投票或接受解決方案的線索 – Nathanphan 2011-03-26 03:41:17

+1

@Nathanphan你在哪裏使用'startDate'? – Clarence 2013-01-07 07:08:48