Spring Boot 1.4:LocalDateTime 映射到 varbinary 而不是时间戳类型

Posted

技术标签:

【中文标题】Spring Boot 1.4:LocalDateTime 映射到 varbinary 而不是时间戳类型【英文标题】:Spring Boot 1.4: LocalDateTime mapped to varbinary instead of timestamp type 【发布时间】:2017-01-01 07:24:03 【问题描述】:

我正在使用Java 8Spring Boot 1.4hsqldb。 我有一个带有java.time.LocalDateTime 字段的实体。 当我检查hibernate生成的sql时,它使用varbinary作为数据类型。 如何让它使用timestamp 数据类型?

更新: 当我添加 hibernate-java8 (5.1.0.Final) 依赖项时,它确实有效。 但它不适用于hibernate-java8 (5.2.x versions)。这可能是因为 Java 8 支持已添加到 hibernate-core 5.2 本身。

【问题讨论】:

【参考方案1】:

在添加 hibernate-java8 (5.1.0.Final) 依赖项时有效。 它不适用于hibernate-java8 (5.2.x versions)。 这是因为 to hibernate-core 5.2 本身添加了 Java 8 支持。

【讨论】:

【参考方案2】:

另一种方法是使用转换器注释您的实体 localDateTime_field。

@Convert(converter = LocalDateTimeConverter.class)
private LocalDateTime localDateTime_field;

事情是这样的:

import javax.persistence.AttributeConverter;
import javax.persistence.Converter;
import java.sql.Timestamp;
import java.time.LocalDateTime;

@Converter
public class LocalDateTimeConverter implements AttributeConverter<LocalDateTime, Timestamp> 

    @Override
    public Timestamp convertToDatabaseColumn(LocalDateTime localDateTime) 
        return localDateTime == null ? null : Timestamp.valueOf(localDateTime);
    

    @Override
    public LocalDateTime convertToEntityAttribute(Timestamp timestamp) 
        return timestamp == null ? null : timestamp.toLocalDateTime();
    

【讨论】:

以上是关于Spring Boot 1.4:LocalDateTime 映射到 varbinary 而不是时间戳类型的主要内容,如果未能解决你的问题,请参考以下文章

使用 Spring Boot 2 和 Kotlin 进行 Jackson 反序列化,无法构造 `java.time.LocalDate` 的实例

Spring Boot 1.4测试的简单理解

如何在 Spring Boot 1.4 中自定义 Jackson

无法使用 Jackson 将 java.time.LocalDate 序列化为字符串

在 Spring Boot 1.4 中测试 Spring MVC 切片的问题

Spring boot 1.4 测试:配置错误:发现@BootstrapWith 的多个声明