我有一个REST控制器,我想选择具有给定Date的行。我正在使用Querydsl生成SQL查询,但问题是Querydsl不能正确生成Date的谓词,并且如果将日期查询参数添加到请求中,则不会得到任何结果。 / p>
这是我的REST控制器中的端点:
@GetMapping(value = "/changelogs")
public Page<Changelog> getChangelogs(@QuerydslPredicate(root = Changelog.class) final Predicate predicate, final Pageable pageable) {
return changelogRepository.findAll(p, pageable);
}
这是具有date属性的实体:
@Temporal(TemporalType.TIMESTAMP)
@DateTimeFormat(pattern = "dd.MM.yyyy")
private Date timestamp;
如果我使用以下日期参数发出请求,则Querydsl会生成谓词,但由于我没有得到任何结果,因此在我的情况下它不起作用:
changelogs/?timestamp=08.08.2018
如果我自己创建谓词,它将按预期工作:
Predicate p = QChangelog.changelog.timestamp.year().eq(2018).and(QChangelog.changelog.timestamp.month().eq(8));
我不确定如何正确执行此操作,也不想自己创建谓词。
编辑:
也很有趣:我将@DateTimeFormat
更改为以下内容:
@DateTimeFormat(pattern = "d.M.y")
private Date timestamp;
生成的谓词的布尔运算符如下:
因此,生成的谓词和自行创建的谓词的布尔运算符看起来完全相同,但是生成的谓词没有给我任何结果,而自行创建的谓词却按预期工作-真奇怪
他们没有-第一个是我创建的谓词,第二个是生成的谓词-Intellij让我感到困惑