如何最佳集成 Java 8 日期时间 API 到 JPA?
我已添加转换器:
@Converter(autoApply = true)
public class LocalDatePersistenceConverter implements AttributeConverter<LocalDate, Date> {
@Override
public Date convertToDatabaseColumn(LocalDate localDate) {
return Date.valueOf(localDate);
}
@Override
public LocalDate convertToEntityAttribute(Date date) {
return date.toLocalDate();
}
}
和
@Converter(autoApply = true)
public class LocalDateTimePersistenceConverter implements AttributeConverter<LocalDateTime, Timestamp> {
@Override
public Timestamp convertToDatabaseColumn(LocalDateTime entityValue) {
return Timestamp.valueOf(entityValue);
}
@Override
public LocalDateTime convertToEntityAttribute(Timestamp databaseValue) {
return databaseValue.toLocalDateTime();
}
}
一切看起来都很好,但是我该如何使用JPQL进行查询?我正在使用Spring JPARepository,我的目标是选择所有日期与给定日期相同的实体,唯一的区别是它以LocalDateTime格式保存在实体中。
因此:
public class Entity {
private LocalDateTime dateTime;
...
}
而且:
@Query("select case when (count(e) > 0) then true else false end from Entity e where e.dateTime = :date")
public boolean check(@Param("date") LocalDate date);
执行时只是抛出异常,这是正确的。
Caused by: java.lang.IllegalArgumentException: Parameter value [2014-01-01] did not match expected type [java.time.LocalDateTime (n/a)]
我尝试了很多方法,但似乎没有一种方法起作用,这可能吗?
date.atStartOfDay()
将您的 LocalDate 转换为 LocalDateTime?错误消息明确告诉您参数类型不正确,应该是 LocalDateTime 类型。 - JB Nizet