在 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))
);
我必须编写一个查询来计算两个日期之间的时差(以年为单位)。其中一个日期是从数据库中获取的,而另一个是 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))
);