一尘不染

休眠中的Java 8 LocalDate错误地映射到TIMESTAMP

hibernate

我使用Spring Boot 1.4.2,它带来了hibernate5.0.11(JPA 2.1)。我想在我的实体中使用Java
8时间类,因此包括在内hibernate-java8

我的实体定义了LocalDate字段。

@Entity
@Table(name = "my_alarms_timeline", indexes = {...})
public class MyAlarm {
    ...
    @Column(name = "validity_date")
    @NotNull
    private LocalDate validityDate;
}

我希望将其映射到我的H2数据库中的DATE。

在我的数据库中,我将此声明为validity_date DATE NOT NULL,

当我尝试运行测试时,出现以下错误:

[INFO] Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: 
    Schema-validation: wrong column type encountered in column [validity_date] in table [my_alarms_timeline]; 
    found [date (Types#DATE)], but expecting [timestamp (Types#TIMESTAMP)]

令我惊讶的是,如果我将数据库定义更改为validity_date TIMESTAMP NOT NULL, 我得到的错误

Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: 
    Schema-validation: wrong column type encountered in column [validity_date] in table [my_alarms_timeline]; 
    found [timestamp (Types#TIMESTAMP)], but expecting [date (Types#DATE)]

这只是前一个消息的相反消息。

我还尝试hibernate-java8了使用而不是,而不是使用,AttributeConverter<LocalDate, java.sql.Date>但这会产生相同的错误结果。

我必须怎么做才能将我的LocalDate正确映射到数据库中的DATE?

我还尝试了将LocalDateTime字段映射到TIMESTAMP,并且此方法没有问题…


阅读 413

收藏
2020-06-20

共1个答案

一尘不染

因此,我通过columnDefinition="DATE"@Column批注中添加来使其运行。

@Entity
@Table(name = "my_alarms_timeline", indexes = {...})
public class MyAlarm {
    ...
    @Column(name = "validity_date", columnDefinition = "DATE")
    @NotNull
    private LocalDate validityDate;
}

不知道为什么没人能看到这个问题…

2020-06-20