Java LocalDate的hibernate架构验证失败-找到日期,但需要时间戳
我最近尝试将我的应用程序从JBoss EAP7.0部署到7.2.4,从那时起,我就面临着对映射到Java LocalDate的hibernate架构验证失败-找到日期,但需要时间戳,java,hibernate,jpa,jboss,Java,Hibernate,Jpa,Jboss,我最近尝试将我的应用程序从JBoss EAP7.0部署到7.2.4,从那时起,我就面临着对映射到date类型列的LocalDate字段进行模式验证的问题。 确切的故障信息是: {"WFLYCTL0080: Failed services" => {"jboss.persistenceunit.\"project-name.ear#MyPersistenceUnit\"" => "javax.persistence.PersistenceException: [PersistenceU
date
类型列的LocalDate
字段进行模式验证的问题。确切的故障信息是:
{"WFLYCTL0080: Failed services" => {"jboss.persistenceunit.\"project-name.ear#MyPersistenceUnit\"" => "javax.persistence.PersistenceException: [PersistenceUnit: MyPersistenceUnit] Unable to build Hibernate SessionFactory
Caused by: javax.persistence.PersistenceException: [PersistenceUnit: MyPersistenceUnit] Unable to build Hibernate SessionFactory
Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [someDate] in table [SOME_TABLE]; found [date (Types#DATE)], but expecting [timestamp (Types#TIMESTAMP)]"}}
架构中的代码段:
创建表格一些表格(
--基本键和其他列
某天
);
实体中的字段:
@Convert(converter=LocalDateConverter.class)
私有localdatesomedate;
转换器
import java.sql.Date;
导入java.time.LocalDate;
导入javax.persistence.AttributeConverter;
导入javax.persistence.Converter;
@转换器(自动应用=真)
公共类LocalDateConverter
工具
属性转换器{
@凌驾
public Date convertToDatabaseColumn(LocalDate属性){
返回属性==null?null:Date.valueOf(属性);
}
@凌驾
公共LocalDate convertToEntityAttribute(日期数据库数据){
返回dbData==null?null:dbData.toLocalDate();
}
}
我发现按照建议添加@列(columnDefinition=“date”)
可以解决问题,但我的问题是:
列定义
此问题与H2有关,但与Oracle连接时没有此问题。已更新 在Oracle模式下使用DATE时,似乎遇到了Hibernate与H2驱动程序不兼容的问题。见: 此外,JBoss7.2现在支持JPA2.2(参见:)。在JPA2.2支持中,添加了Java8时间类,如LocalDate,因此您可以删除转换器 JPA2.2使用JDBC4.2。以下是JDBC中的对象映射 见表B-4:
删除
@Convert
注释有效。但是为什么在模式验证期间它会对数据类型产生影响呢?JPA2.2使用JDBC4.2。JDBC 4.2中LocalDate类型的映射是DATE。通过转换器,模式生成使用java.util.Date作为需要映射的对象类型,在JDBC中,java.util.Date映射到时间戳。请注意,JPA为java.util.Date字段提供了@Temporal注释,允许您使用日期而不是默认时间戳。感谢@areus的解释。是否有一些参考链接支持您的第一条评论?我在JDBC4.2中添加了对象映射表。