Querydsl谓词和时间戳/日期问题

时间:2018-08-08 13:52:13

标签: spring-boot spring-data-jpa querydsl

我有一个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

如果我自己创建谓词,它将按预期工作:

Predicate p = QChangelog.changelog.timestamp.year().eq(2018).and(QChangelog.changelog.timestamp.month().eq(8));

predicate 2

我不确定如何正确执行此操作,也不想自己创建谓词。

编辑: 也很有趣:我将@DateTimeFormat更改为以下内容:

@DateTimeFormat(pattern = "d.M.y")
private Date timestamp;

生成的谓词的布尔运算符如下:

predicate boolean operators 第一个看起来不错(但是日子不见了),第二个我不知道

因此,生成的谓词和自行创建的谓词的布尔运算符看起来完全相同,但是生成的谓词没有给我任何结果,而自行创建的谓词却按预期工作-真奇怪 他们没有-第一个是我创建的谓词,第二个是生成的谓词-Intellij让我感到困惑

0 个答案:

没有答案