【问题标题】:How to match date value to a column which has timestamp values in Hibernate Criteria?如何将日期值与 Hibernate Criteria 中具有时间戳值的列匹配?
【发布时间】:2014-10-20 13:51:18
【问题描述】:

我想将日期 2014-08-26 值匹配到具有时间戳数据类型的列(称为 update_date)。

Criteria criteria=createEntityCriteria(Order.class);
criteria.add(Restrictions.eq("updatedDate",transactionDate1));

当我使用上面的代码时,由于数据类型不匹配,它不会返回任何东西。

select * from order_master where security_id=2 and client_master_id=3 and update_date="2014-08-26 19:04:14";

上面的查询返回准确的结果。主要问题是我只有数据2014-08-26,但没有更新时间。 请让我知道我应该怎么做才能在Hibernate Criteria 中获得正确的结果。

【问题讨论】:

    标签: hibernate date timestamp criteria


    【解决方案1】:

    参考这篇文章 --> Hibernate Criteria for Dates

    根据这篇文章,您不能使用Restrictions.eq()Restrictions.like() 来比较日期。

    以下是适合您的代码:

    比较两个范围之间的日期:

            SimpleDateFormat formatter = new SimpleDateFormat("dd-MM-yyyy");
    
            String startDateStr = "18-08-2014";
            String endDateStr = "27-08-2014";
    
            Date startDate = formatter.parse(startDateStr);
            Date endDate = formatter.parse(endDateStr);
    
            List<Order> orders = session.createCriteria(Order.class)
                    .add(Restrictions.between("updatedDate", startDate, endDate))
                    .list();
            for (Order order : orders) {
                System.out.println(order.getUpdatedDate());
            }
    

    如果您想获取一天的记录,则可以将字段 endDate 替换为:

    Date endDate = new Date(minDate.getTime() + TimeUnit.DAYS.toMillis(1));
    

    【讨论】:

      【解决方案2】:

      如下所示

      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) ); 
      

      【讨论】:

        猜你喜欢
        • 2021-09-15
        • 1970-01-01
        • 2014-02-13
        • 2013-11-27
        • 2021-10-31
        • 2017-12-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多