如何在 Hibernate/JPA 中使用 Java 8 Date 库? [复制]

Posted

技术标签:

【中文标题】如何在 Hibernate/JPA 中使用 Java 8 Date 库? [复制]【英文标题】:How to use Java 8 Date library with Hibernate/JPA? [duplicate] 【发布时间】:2017-10-10 16:45:34 【问题描述】:

如何为我的 POJO 使用日期库?

我可以使用我的代码:

@Data
@Entity
@Table(name = "PERSON")
public class Person implements Serializable 

    private static final long serialVersionUID = -8041031461422721556L;

    @Id
    @Column(name = "PERSON_ID")
    private Long id;

    @Column(name = "NAME")
    private String name;

    @Column(name = "DOB")
    private LocalDate dob;


我正在使用java.time.LocalDate 类型。

【问题讨论】:

errm,它是 JPA 2.2 的一部分。您的提供商还不支持 JPA 2.2 吗? 对于 Hibernate,请参阅重复链接的 second answer。 【参考方案1】:

目前 Hibernate/JPA 不兼容 Java 8 Date 库,但您只需要制作一个 AttributeConverter 即可使用该库:

对于 TIMESTAMP 类型,您可以使用此转换器:

@Converter(autoApply = true)
public class LocalDateTimeAttributeConverter implements AttributeConverter<LocalDateTime, Timestamp> 

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

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


对于 DATE 类型,您可以使用此转换器:

@Converter(autoApply = true)
public class LocalDateAttributeConverter implements AttributeConverter<LocalDate, Date> 

    @Override
    public Date convertToDatabaseColumn(LocalDate date) 
        return date == null ? null : Date.valueOf(date);
    

    @Override
    public LocalDate convertToEntityAttribute(Date date) 
        return date == null ? null : date.toLocalDate();
    


对于 TIME 类型,您可以使用此转换器:

@Converter(autoApply = true)
public class LocalTimeAttributeConverter implements AttributeConverter<LocalTime, Time> 

    @Override
    public Time convertToDatabaseColumn(LocalTime time) 
        return time == null ? null : Time.valueOf(time);
    

    @Override
    public LocalTime convertToEntityAttribute(Time time) 
        return time == null ? null : time.toLocalTime();
    


【讨论】:

以上是关于如何在 Hibernate/JPA 中使用 Java 8 Date 库? [复制]的主要内容,如果未能解决你的问题,请参考以下文章

直接加入 JPA 或 HIBERNATE

如何使用hibernate jpa在内存数据库中设置h2?

如何强制初始化 Hibernate JPA 代理以在 JSON 调用中使用它

如何在 Hibernate JPA 中添加可编程的实体侦听器

如何使用 Hibernate JPA 和 Spring Framework 启用加载时间/运行时编织

如何使用 @ID 和 @GeneratedValue 从 Hibernate + JPA 中的序列中获取 Oracle 生成的值