日期的休眠条件

2022-09-01 16:41:46

在预言机中,我有格式的日期

17-四月-2011 19:20:23.707000000

我想检索 17-04-2011 的所有订单。

 SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
Date date = formatter.parse(myDate);
    Criteria criteria = 
                session.createCriteria(Order.class);
Criterion restrictDate = Restrictions.like("orderDate",date); 

但它给我带来了空洞的结果:


答案 1

为什么使用 )?Restrictions.like(...

您应该使用 .Restrictions.eq(...)

注意,您也可以对日期对象使用 、 、 、 作为比较运算符。 运算符不适用于这种情况,因为当您想要根据列的部分内容匹配结果时,运算符很有用。请参阅 http://www.sql-tutorial.net/SQL-LIKE.asp 以获取参考。.le.lt.ge.gtLIKELIKE

例如,如果您有一个包含某些人全名的名称列,则可以这样做,这样您将返回名称以 ( ( 可以替换任何字符) 开头的所有条目。where name like 'robert %''robert '%

在你的情况下,你知道你试图匹配的日期的完整内容,所以你不应该使用,但平等。我想Hibernate在这种情况下不会给你任何例外,但无论如何,你可能会遇到同样的问题。LIKERestrictions.eq(...)

您通过代码获得的日期对象:

SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
String myDate = "17-04-2011";
Date date = formatter.parse(myDate);

此日期对象等于 17-04-2011 在 0h, 0 分, 0 秒和 0 纳秒.

这意味着数据库中的条目必须具有该日期。我的意思是,如果您的数据库条目的日期为“17-April-2011 19:20:23.707000000”,则不会检索它,因为您只需询问该日期:“17-April-2011 00:00:00.0000000000”。

如果要检索给定日期的数据库的所有条目,则必须使用以下代码:

    SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-YYYY");
    String myDate = "17-04-2011";
    // Create date 17-04-2011 - 00h00
    Date minDate = formatter.parse(myDate);
    // Create date 18-04-2011 - 00h00 
    // -> We take the 1st date and add it 1 day in millisecond thanks to a useful and not so known class
    Date maxDate = new Date(minDate.getTime() + TimeUnit.DAYS.toMillis(1));
    Conjunction and = Restrictions.conjunction();
    // The order date must be >= 17-04-2011 - 00h00
    and.add( Restrictions.ge("orderDate", minDate) );
    // And the order date must be < 18-04-2011 - 00h00
    and.add( Restrictions.lt("orderDate", maxDate) ); 

答案 2

通过使用这种方式,您可以获取所选记录的列表。

GregorianCalendar gregorianCalendar = new GregorianCalendar();
Criteria cri = session.createCriteria(ProjectActivities.class);
cri.add(Restrictions.ge("EffectiveFrom", gregorianCalendar.getTime()));
List list = cri.list();

所有记录将生成到大于或等于“08-Oct-2012”的列表中,或者通过用户接受日期的日期在条件的限制()的第二个参数处获得记录。gregorianCalendar.getTime()


推荐