我正在通过条件生成器在我的 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 数据类型。因此,它应该只获取具有该日期的记录,但它会提供所有记录,并且条件将被忽略。
多次调用
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)
);