我使用Spring Boot 1.4.2,它带来了hibernate5.0.11(JPA 2.1)。我想在我的实体中使用Java 8时间类,因此包括在内hibernate-java8。
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,。
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, 我得到的错误
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>但这会产生相同的错误结果。
AttributeConverter<LocalDate, java.sql.Date>
我必须怎么做才能将我的LocalDate正确映射到数据库中的DATE?
我还尝试了将LocalDateTime字段映射到TIMESTAMP,并且此方法没有问题…
LocalDateTime
因此,我通过columnDefinition="DATE"在@Column批注中添加来使其运行。
columnDefinition="DATE"
@Column
@Entity @Table(name = "my_alarms_timeline", indexes = {...}) public class MyAlarm { ... @Column(name = "validity_date", columnDefinition = "DATE") @NotNull private LocalDate validityDate; }
不知道为什么没人能看到这个问题…