对日期对象使用Hibernate的匹配模式

对日期对象使用Hibernate的匹配模式,hibernate,Hibernate,我有一个日期为26/12/2007的Date对象,我想与MySQL数据库26/12/2007 12:00:00中的日期进行比较。比如,如果我发送一个日期为2007年12月26日,它应该根据MySQL数据库中的日期检索值 如果我删除这个12:00:00,它会工作,但是如果我添加12:00:00,它不会给出任何结果 我使用的是Hibernate标准,比如 criteria.addRestrictions.likedateinsql,日期; 我试着用 criteria.addRestrictions.

我有一个日期为26/12/2007的Date对象,我想与MySQL数据库26/12/2007 12:00:00中的日期进行比较。比如,如果我发送一个日期为2007年12月26日,它应该根据MySQL数据库中的日期检索值

如果我删除这个12:00:00,它会工作,但是如果我添加12:00:00,它不会给出任何结果

我使用的是Hibernate标准,比如

criteria.addRestrictions.likedateinsql,日期; 我试着用

criteria.addRestrictions.likedateinsql、date、MatchMode.AnyWhere; 但它只适用于字符串,不适用于日期


有解决方案吗?

基本上,您需要重新格式化日期变量的模式,即根据指定的日期模式获取其字符串格式,然后将其转换回日期对象。dd MMM yyy是适用于hibernate的格式

试试这个:-

    GregorianCalendar calendar = new GregorianCalendar();
    calendar.setTime(your_input_date);
    calendar.add(Calendar.DATE, 1); // this is needed to if you want to deal with 12 hrs difference.

    SimpleDateFormat sdf    =   new SimpleDateFormat("dd MMM yyyy");
    Date formattedDate = sdf.parse(org.apache.commons.lang.time.DateFormatUtils.format(calendar.getTime(),"dd MMM yyyy"));
使用此格式化日期

criteria.addRestrictions.likedateinsql,formattedDate


应该可以正常工作。

谢谢,我试过了,但没有成功,我从您的代码中得到的格式化日期是:周一至七月四日00:00:00 EDT 2011,在mySQL中是:2011-07-04 12:31:39,因此我认为它不匹配,任何建议如果您需要在24小时范围内搜索,请使用小于或大于限制,即。,criteria.addRestrictions.ge dateinsql,formattedDate.addRestrictions.ltdateinsql,currentDate;其中currentDate=sdf.parseDateFormatUtils.formatyour_input_date,dd-MMM-yyyy;这将为您提供一个24小时的范围,例如,从7月4日00:00到7月5日00:00