2011-03-24 80 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