日期标准在 Spring boot 标准生成器中不起作用

问题描述 投票:0回答: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();

我尝试将 GreaterThanOrEqualTo 和 lessThanOrEqualTo 放入日期和日期+1 值。我应用条件的变量是 SQL Server DB 表中的 datetime2 数据类型。因此,它应该只获取具有该日期的记录,但它会提供所有记录,并且条件将被忽略。

java sql-server spring-boot hibernate hibernate-criteria
1个回答
0
投票

多次调用

CriteriaQuery.wherer()
不会添加谓词。 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)
    );
© www.soinside.com 2019 - 2024. All rights reserved.