【问题标题】:Criteria Builder for date range check日期范围检查的标准生成器
【发布时间】:2020-10-24 15:34:42
【问题描述】:

我正在尝试检查“toDate”是否在范围内,为此我尝试了 2 种方法,但都没有为我工作

方法一:

if (MyEntity.getFromDate() != null
                        && MyEntity.getToDate() != null)) {
                    predicate.getExpressions()
                            .add(criteriaBuilder.between((root.<Date>get("toDate")), MyEntity.getFromDate(),MyEntity.getToDate()));

方法 2

if(MyEntity.getFromDate() != null
    && MyEntity.getToDate() != null) {
    DateFormat dateFormat = new SimpleDateFormat(Constants.DBDATEFORMAT);
     String fromDateInString = dateFormat.format(MyEntity.getFromDate());
    String toDateInString = dateFormat.format(MyEntity.getToDate());
    String[] fromDateSplitation = fromDateInString.split(" ");
    String[] toDateSplitation = toDateInString.split(" ");
    StringBuilder startLimit = new StringBuilder();
    StringBuilder endLimit = new StringBuilder();
    startLimit.append(fromDateSplitation[0]).append(" ").append("00:00:00");
    endLimit.append(toDateSplitation[0]).append(" ").append("23:59:59");
    Date fromDate;
    try {
    fromDate = dateFormat.parse(startLimit.toString());
    Date toDate = dateFormat.parse(endLimit.toString());
    MyEntity.setFromDate(fromDate);
    MyEntity.setToDate(toDate);
    predicate.getExpressions().add(criteriaBuilder.between(root.get("toDate"),
    MyEntity.getFromDate(), MyEntity.getToDate()));
    } catch (ParseException e) {
    e.printStackTrace();
    }

谁能告诉我如何在标准生成器中正确使用“介于”和“等于”的日期?

【问题讨论】:

标签: java spring-boot criteria


【解决方案1】:

我一直使用您的第一种方法,但没有在路径上指定泛型。你能不能试试:

.add(criteriaBuilder.between(root.get("toDate"),
MyEntity.getFromDate(),MyEntity.getToDate()));

最重要的是,你确定你的实体的 toDate 字段是用@Temporal(TemporalType.TIMESTAMP)注释的

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-11
    • 2021-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多