在 JPA 条件查询中对 LocalDate 使用 TIMESTAMPDIFF 函数

Using TIMESTAMPDIFF function on LocalDate in JPA Criteria query

我必须编写一个查询来计算两个日期之间的时差(以年为单位)。其中一个日期是从数据库中获取的,而另一个是 LocalDate。以下是我写的代码:

Expression<String> year = new UnitExpression(null, String.class, "YEAR");
LocalDate date=LocalDate.of(2018, 04, 30);
Expression<Integer> timeDiff = builder.function(
            "TIMESTAMPDIFF",
            Integer.class,
            year ,
            propertyListRoot.get("rentStartDate"),
            date);

其中 UnitExpression 是自定义 class 扩展 BasicFunctionExpression 。然而,这给出了一个编译时错误说

Required type Expression<?> Provided LocalDate

我研究了一下并尝试了

criteriaBuilder.literal(date)

这解决了编译时错误,但没有计算出正确的值。什么是可能的解决方案?我在这里错过了什么?

我犯的错误是没有将函数的参数转换为 Timestamp。这很好用:

Expression<Integer> timeDiff = builder.function(
            "TIMESTAMPDIFF",
            Integer.class,
            year,
            propertyListRoot.<Timestamp>get("rentStartDate"),
            builder.literal(Timestamp.valueOf(month))
    );