Hibernate @Temporal for Java 8 java.time.Instant

Dmi*_*nin 20 hibernate jpa java-8

我使用Hibernate并尝试执行以下操作:

@Temporal(TemporalType.DATE)
@Column(name = "BIRTHDAY")
private Instant birthday;
Run Code Online (Sandbox Code Playgroud)

但有这个例外:

Caused by: org.hibernate.AnnotationException: @Temporal should only be set on a java.util.Date or java.util.Calendar property:
Run Code Online (Sandbox Code Playgroud)

正如我所建议的那样尝试使用

<dependency>
    <groupId>org.hibernate</groupId>
    <artifactId>hibernate-java8</artifactId>
    <version>${hibernate.ver}</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

但有相同的例外.我应该做一些额外的步骤或如何解决这种情况?

HAY*_*bl4 35

你不能使用@Temporaljava 8时间,如果你想要日期和时间使用LocalDateTime,如果你只想使用日期LocalDate而没有@Temporalanotation.

看看http://www.thoughts-on-java.org/persist-localdate-localdatetime-jpa/

  • @DmitriiAdonin,您唯一需要的是删除注释并将该字段标记为基本列.无需任何转换器即可正常工作.我没有直接回答,所以HAYMbl4你能编辑你的答案吗? (2认同)

小智 17

JPA 2.2 使用 columnDefinition 支持 Java 8 日期和时间 API:

@Column(name = "local_time", columnDefinition = "TIME")
private LocalTime localTime;

@Column(name = "local_date", columnDefinition = "DATE")
private LocalDate localDate;

@Column(name = "local_date_time", columnDefinition = "TIMESTAMP")
private LocalDateTime localDateTime;
Run Code Online (Sandbox Code Playgroud)

  • 这是一个错误的解决方案。您需要跳过“columnDefinition”字段。将自动应用当前类型。并非所有数据库都有“TIME”类型。例如——甲骨文。 (3认同)