将 LocalDate.MAX 转换为日期

Ans*_*lte 5 java spring jpa

我们使用 Spring Data JPA 来访问 Derby-DB。时间值定义为 java.time.LocalDate (java 8 time api)。Spring Data 现在附带了 org.springframework.data.convert.Jsr310Converters.LocalDateToDateConverter,用于将 LocalDate 转换为 java.util.Date,因为据我所知,JPA 规范到目前为止还不支持 LocalDate。

现在,我们在将 LocalDate.MAX 转换为 Date 时遇到问题,导致出现以下异常(已删除):

Caused by: java.lang.IllegalArgumentException: java.lang.ArithmeticException: long overflow
at java.util.Date.from(Unknown Source)
at org.springframework.data.convert.Jsr310Converters$LocalDateToDateConverter.convert(Jsr310Converters.java:116)
at org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters$LocalDateConverter.convertToDatabaseColumn(Jsr310JpaConverters.java:52)
at org.springframework.data.jpa.convert.threeten.Jsr310JpaConverters$LocalDateConverter.convertToDatabaseColumn(Jsr310JpaConverters.java:47)
at org.hibernate.type.descriptor.converter.AttributeConverterSqlTypeDescriptorAdapter$1.bind(AttributeConverterSqlTypeDescriptorAdapter.java:97)
... 79 more
Caused by: java.lang.ArithmeticException: long overflow
at java.lang.Math.multiplyExact(Unknown Source)
at java.time.Instant.toEpochMilli(Unknown Source)
... 84 more
Run Code Online (Sandbox Code Playgroud)

有谁也遇到过这个问题并有解决这个问题的建议吗?

Nei*_*ton 4

java.util.Date不支持那么远的未来日期。查看它的javadoc

Instant可以将时间线上的点存储在比 更远的未来和更远的过去Date

因此,您必须定义自己的 JPA AttributeConverter,并可能将其存储为字符串或其他类型