【问题标题】:Using between in QueryDSL for date parameters在 QueryDSL 中使用 between 获取日期参数
【发布时间】:2017-09-07 08:49:36
【问题描述】:

我正在使用带有 jpa 的 QueryDSL,我想查找日期范围之间的记录,就像这样

query.from(timeSheet)
              .where(timeSheet.date.between(fromDate, toDate)).fetch();

但是 between 只支持布尔和字符串表达式

【问题讨论】:

  • 试试 cast(fromDate as date) 和 cast(toDate as date)。 Querydsl 不提供 datediff 函数
  • 非优雅 gt and lt 可以在 DB 上有效执行。比较器可能会将无数行获取到客户端(客户端过滤)一分钟后编辑:我在不同@Priyesh 评论的上下文中写作
  • gt , lt , goe, loe 采用布尔表达式或字符串表达式
  • 你使用什么版本的QueryDSLquery 的类型是什么?是JPAQuery吗?
  • @PriyeshMishra 我对糟糕的支持日期类型感到惊讶。

标签: java jpa querydsl


【解决方案1】:
query.from(timeSheet)
              .where(timeSheet.date.between("today >= fromDate AND today <= toDate")).fetch();

尝试类似的东西。

【讨论】:

    【解决方案2】:

    这段代码对我有用。所有日期都在LocalDate甲酸盐中。

    JPAQueryFactory jpaQueryFactory = new JPAQueryFactory(entityManager);
    return jpaQueryFactory
                    .from(qAccVoucherMaster)
                    .leftJoin(qAccVoucherMaster.accFinancialYear, qAccFinancialYear).fetchJoin()
                    .where(qAccVoucherMaster.voucherDate.between(fromDate, toDate))
                    .fetch();
    

    【讨论】:

      猜你喜欢
      • 2019-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 1970-01-01
      • 2013-11-27
      • 2014-01-25
      相关资源
      最近更新 更多