将日期传递给Java的hql查询

时间:2013-06-21 17:26:54

标签: java sql hibernate date

我试图找出如何获得比当前日期少一年的日期,并将其作为参数传递给HQL。

我尝试使用日历。但我很遗憾将此转换为Oracle所需的正确日期格式。

Calendar cal = Calendar.getInstance();  
cal.setTime(new Date());  
cal.set(Calendar.HOUR_OF_DAY, 0);
cal.set(Calendar.MINUTE, 0);
cal.set(Calendar.SECOND, 0);
cal.set(Calendar.MILLISECOND, 0);
cal.add(Calendar.YEAR, -1);
String dateLimit = cal.getTime().toString();
Date dateFormatter = new SimpleDateFormat("dd-MMM-yyyy").parse(dateLimit); // This one shows I need to either wrap it up in try catch or specify in throws.

//Date cutOffDate = dateFormatter.parse(dateLimit); //tried this. no avail

queryBuilder.append(" and c.dateOfContact >= :cutOffDate ");
parameters.put("cutOffDate", dateFormatter);

或者,是否有任何Hibernate内置函数用于日期操作?我想要的只是将日期传递给查询,该查询比当前日期少一年。

Oracle日期格式为dd-MMM-yyyy。 (例如:2013年6月21日)

2 个答案:

答案 0 :(得分:1)

我认为这会奏效:

parameters.put("cutOffDate", cal.getTime());

如果c.dateOfContact的类型是java.util.Date或java.sql.Date,则必须使用cal.getTime()。

答案 1 :(得分:0)

Date d =  cal.getTime();
Query query = em.createQuery(QUERYSTRING)setParameter("cutOffDate", d);

以上内容应该有效,请勿将日期格式化为字符串,因为这样您就会比较StringDate