【问题标题】:Unable to fetch data between two dates in Hibernate Criteria无法在 Hibernate Criteria 中获取两个日期之间的数据
【发布时间】:2017-08-01 22:04:06
【问题描述】:

令人惊讶的是,我无法获取两个日期之间字段的总和 我的方法是:

public static double getTotalfeeIncome(Date fromDate, Date toDate) {
        Session session = HibernateUtil.getSessionFactory().openSession();
        Transaction tx = null;
        double total = 0.0;
        try {
            tx = session.beginTransaction();
            Criteria cr = session.createCriteria(StudentFees.class);
            cr.add(Restrictions.eq("delFlg", "N"));
            cr.add(Restrictions.between("paymentDate", fromDate, toDate));
            log.debug(fromDate);
            log.debug(toDate);
            total = (Double) cr.setProjection(Projections.sum("paymentAmt")).uniqueResult();
            tx.commit();
        } catch (Exception asd) {
            log.debug(asd.getMessage());
            if (tx != null) {
                tx.rollback();
            }
        } finally {
            session.close();
        }
        return total;
    }

当我尝试获取值时:

double feeIncome = Expense.getTotalfeeIncome(fdate, tdate);

返回 0 但两个日期之间有数据。我的catch 部分似乎没有打印出错误。我的记录器输出是:

[edulogger] [11 Mar 2017 - 18:54:48] [DEBUG][dao.Expense][getTotalfeeIncome] - Sat Mar 11 00:00:00 EAT 2017 
2017-03-11 18:54:48,334 DEBUG com.orig.edu.dao.Expense edulogger:182 - Sat Mar 11 00:00:00 EAT 2017
[edulogger] [11 Mar 2017 - 18:54:48] [DEBUG][dao.Expense][getTotalfeeIncome] - Sat Mar 11 00:00:00 EAT 2017 
2017-03-11 18:54:48,338 DEBUG com.orig.edu.dao.Expense edulogger:183 - Sat Mar 11 00:00:00 EAT 2017
Hibernate: select sum(this_.payment_amt) as y0_ from edutek.student_fees this_ where this_.del_flg=? and this_.payment_date between ? and ?
[edulogger] [11 Mar 2017 - 18:54:48] [DEBUG][dao.Expense][getTotalfeeIncome] -  
2017-03-11 18:54:48,455 DEBUG com.orig.edu.dao.Expense edulogger:187 - 

我做错了什么?

【问题讨论】:

    标签: java mysql hibernate hibernate-criteria


    【解决方案1】:

    使用下面的

    cr.add(criteria.add(Restrictions.ge("paymentDate", fromDate))); 
    cr.add(criteria.add(Restrictions.lt("paymentDate", toDate)));
    

    而不是

    cr.add(Restrictions.between("paymentDate", fromDate, toDate));
    

    更新:

    cr.add(Restrictions.between("DATE(paymentDate)", fromDate, toDate));
    

    资源链接: https://stackoverflow.com/a/6122906/2293534

    【讨论】:

    • 我得到了相同的结果。只有查询输出发生了变化,但没有选择任何数据。
    • 请您检查更新的部分@ErrorNotFoundException
    • 这会返回错误could not resolve property: DATE(paymentDate) of: com.orig.edu.jpa.StudentFees
    • @ErrorNotFoundException 您的开始日期和结束日期可能相同。请再次检查日志。
    猜你喜欢
    • 2018-03-15
    • 1970-01-01
    • 2019-04-19
    • 2013-10-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-16
    • 1970-01-01
    • 2016-04-17
    相关资源
    最近更新 更多