我使用 Spring boot 1.4.2,它带来了 hibernate 5.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 数据库中的日期。
在我的数据库中,我将其声明为 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
字段映射到时间戳,这可以正常工作......
最佳答案
因此,我通过向 @Column
注释添加 columnDefinition="DATE"
来运行它。
@Entity
@Table(name = "my_alarms_timeline", indexes = {...})
public class MyAlarm {
...
@Column(name = "validity_date", columnDefinition = "DATE")
@NotNull
private LocalDate validityDate;
}
不确定为什么其他人没有看到这个问题...
关于spring - Hibernate 中的 Java 8 LocalDate 错误地映射到 TIMESTAMP,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40514341/