【问题标题】:CriteriaQuery returning wrong resultCriteriaQuery 返回错误结果
【发布时间】:2020-04-28 15:29:59
【问题描述】:

我的 CriteriaQuery 只返回一条记录,并且应该返回两条 dateFrom = '2019-12-10'dateTo = '2019-12-20' 我不知道为什么。

这是我的数据库截图。

这是我的查询:

        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        CriteriaQuery<Reservation> reservationQuery  = criteriaBuilder.createQuery(Reservation.class);
        Root<Reservation> reservationRoot = reservationQuery.from(Reservation.class);

        Predicate dateFrom = criteriaBuilder.greaterThanOrEqualTo(reservationRoot.get("dateFrom"), reservationDto.getDateFrom());
        Predicate dateTo = criteriaBuilder.lessThanOrEqualTo(reservationRoot.get("dateTo"), reservationDto.getDateTo());

        reservationQuery.where(dateFrom, dateTo);
        TypedQuery<Reservation> res = entityManager.createQuery(reservationQuery);
        List<Reservation> result = res.getResultList();

【问题讨论】:

  • 您的代码似乎没问题。你试过调试吗?
  • 尝试启用查询日志并检查生成的查询。

标签: java mysql hibernate entitymanager criteriaquery


【解决方案1】:

我用查询解决了我的问题,它工作正常。

        CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
        CriteriaQuery<Reservation> reservationQuery  = criteriaBuilder.createQuery(Reservation.class);
        Root<Reservation> reservationRoot = reservationQuery.from(Reservation.class);

        Predicate dateFrom = criteriaBuilder.greaterThanOrEqualTo(reservationRoot.get("dateFrom"), reservationDto.getDateFrom());
        Predicate dateTo = criteriaBuilder.lessThanOrEqualTo(reservationRoot.get("dateTo"), reservationDto.getDateTo());

        criteriaBuilder.and(dateFrom);
        criteriaBuilder.and(dateTo);
//        reservationQuery.where(dateFrom, dateTo);
        TypedQuery<Reservation> res = entityManager.createQuery(reservationQuery);
        List<Reservation> result = res.getResultList();
        return result;

【讨论】:

    猜你喜欢
    • 2021-05-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多