代码之家  ›  专栏  ›  技术社区  ›  Parth Atara

日期条件在Spring启动条件生成器中不起作用

  •  0
  • Parth Atara  · 技术社区  · 1 年前

    我正在通过标准生成器在我的Java Springboot项目中应用日期标准,但它不起作用。所有记录都在被提取,而日期条件被忽略了。

    Session session = sessionFactory.getCurrentSession();
            CriteriaBuilder builder = session.getCriteriaBuilder();
            CriteriaQuery<FilesInfoModel> query = builder.createQuery(FilesInfoModel.class);
            Root<FilesInfoModel> root = query.from(FilesInfoModel.class);
    
            Timestamp sqlTimestamp = Timestamp.valueOf(restrictProfileDateTime);
    
            query.where(builder.greaterThanOrEqualTo(root.get("createdDate"), sqlTimestamp));
            query.where(builder.lessThanOrEqualTo(root.get("createdDate"), Timestamp.valueOf(restrictProfileDateTime.plusDays(1))));
            query.where(builder.equal(root.get("fileType"), deltaScreeningFileType));
            query.select(root);
            List<FilesInfoModel> filesInfoList = session.createQuery(query).getResultList();
    

    我试着把ThanOrEqualTo&lessThanOrEqualTo设置为日期和日期+1值。我对其应用条件的变量是SQL Server DB表中的datetime2数据类型。因此,它应该只获取具有该日期的记录,但它给出了所有记录,而条件被忽略了。

    1 回复  |  直到 1 年前
        1
  •  1
  •   siggemannen    1 年前

    使命感 CriteriaQuery.where() 多次不添加谓词。这个 javadoc 状态: 替换以前添加的限制(如果有)。

    因此,代码应该更改如下(未经测试):

        query.where(builder.and(
            builder.greaterThanOrEqualTo(root.get("createdDate"), sqlTimestamp),
            builder.lessThanOrEqualTo(root.get("createdDate"), Timestamp.valueOf(restrictProfileDateTime.plusDays(1))),
            builder.equal(root.get("fileType"), deltaScreeningFileType)
        );