Cách tốt nhất để tích hợp Java 8 Date Time api trong jpa là gì?Java 8 Ngày giờ api trong JPA
chuyển đổi Tôi đã thêm:
@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();
}
}
và
@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();
}
}
Tất cả mọi thứ có vẻ tốt đẹp, nhưng làm thế nào tôi nên sử dụng JPQL để truy vấn? Tôi đang sử dụng Spring JPARepository và mục tiêu là chọn tất cả các thực thể mà ngày tháng giống như ngày đã cho, khác biệt duy nhất là nó được lưu trong thực thể như LocalDateTime.
Vì vậy:
public class Entity {
private LocalDateTime dateTime;
...
}
Và:
@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);
Khi thực hiện nó chỉ mang lại cho tôi có ngoại lệ, đó là chính xác.
Caused by: java.lang.IllegalArgumentException: Parameter value [2014-01-01] did not match expected type [java.time.LocalDateTime (n/a)]
Tôi đã thử nhiều cách, nhưng có vẻ như không có cách nào hoạt động, thậm chí có thể không?
Trường của bạn thuộc loại LocalDateTime. Tham số của bạn thuộc loại LocalDate. Nó phải thuộc loại LocalDateTime. Điều gì xảy ra khi bạn thực hiện truy vấn? –
Có, tôi hiểu rằng, tôi cần phải tiết kiệm datetime nhưng truy vấn theo ngày. – sandris
Sau đó, tại sao không sử dụng 'date.atStartOfDay()' để chuyển đổi LocalDate của bạn thành LocalDateTime? Thông báo lỗi cho bạn biết chính xác rằng tham số không phải là kiểu đúng và phải là kiểu LocalDateTime. –