当前位置: 首页 > 面试题库 >

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

别烨熠
2023-03-14
问题内容

我使用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,并且此方法没有问题…


问题答案:

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

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

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



 类似资料:
  • 问题内容: 我在MySQL中有一个ID字段类型为BIGINT的表 在hibernate对象中,我为此字段使用Java Long类型 但是当运行程序时,它会抛出异常: 如何在hibernate状态下映射MySQL BINGINT数据类型? 问题答案: 但是在运行程序时,它将引发异常:预期:类java.lang.Long,得到类java.lang.Integer 为BIGINT 使用a 是正确的,上述

  • 问题内容: 我有一个使用Hibernate在数据库上进行CRUD操作的Web应用程序。我收到一条错误消息,说该表未映射。查看Java文件: 错误信息: 这是我的方法: : 我应该如何修改才能正常工作? 问题答案: 异常消息怎么说?它说: 这告诉你什么?它告诉您未映射。也就是说,没有称为的映射类型。 确实,没有。您的映射类型称为。它映射到名为的表,但类型称为。在编写HQL(或JPQL)查询时,您使用

  • 问题内容: 我需要预先将没有实现接口的枚举映射到现有数据库,该数据库使用将该枚举存储在与所有者类相同的表中。 在这种情况下应如何处理映射?持久化到数据库不会改变,因为实现该接口的所有枚举都将具有不同的值,但是我不确定应如何从数据库中检索对象(我是否需要自定义映射器,它将尝试实例化一个使用指定的enum类进行枚举吗?Hibernate是否本身支持此功能?)。 问题答案: 可以创建一个自定义(例如th

  • 问题内容: Hibernate提供的注释支持使用或两种类型的映射。当我们使用映射时,它使用的“名称” 而不是Enum 的表示形式。在数据库列仅包含一个字符的情况下,这是一个问题。例如,我有以下枚举: 当我坚持枚举使用,即休眠尝试在数据库中存储的值是开放的。但是,我的数据库列仅包含一个字符,因此会引发异常。 克服这个问题的一个办法是改变枚举类型持有单个字符(如,代替,)。但是,这降低了可读性。有什么

  • 问题内容: 我试图从“用户”表中获取所有用户的列表,但出现以下错误: 这是我编写的用于添加/获取用户的代码: 添加用户是可行的,但是当我使用getUsers函数时,出现这些错误。 这是我的休眠配置文件: 这是我的User类: 知道为什么我会收到此错误吗? 问题答案: 在HQL中,应使用映射的 java类名 和 属性名 ,而不是实际的表名和列名,因此HQL应该为: 更新:更精确地说,您应该使用在中配

  • 问题内容: 我有一个颜色枚举 我有包含它的MyEntity。 我已经有一个UserType来映射我的枚举。 您知道如何在Hibernate hbm.xml中映射枚举集吗? 我需要一个UserType还是最简单的方法? 谢谢 编辑: 只是为了说明一下,我正在寻找 hbm.xml 配置而不是@CollectionOfElements注释 问题答案: 我使用EnumSet映射线程中的解决方案,该解决方案