Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java LocalDate的hibernate架构验证失败-找到日期,但需要时间戳_Java_Hibernate_Jpa_Jboss - Fatal编程技术网

Java LocalDate的hibernate架构验证失败-找到日期,但需要时间戳

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

我最近尝试将我的应用程序从JBoss EAP7.0部署到7.2.4,从那时起,我就面临着对映射到
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”)
可以解决问题,但我的问题是:

  • 在这种情况下,我是否需要强制添加
    列定义
  • 该应用程序在JBoss7.0中运行良好。我如何知道JBoss7.2.4中引入的哪些更改破坏了我的应用程序
  • 解决此问题的任何其他建议


  • 此问题与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中添加了对象映射表。