You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Spring Boot 2.2迁3.2:Hibernate TypeDef/TypeDefs注解替代方案咨询

解决方案

1. 移除废弃的Hibernate注解

Hibernate 6.x(Spring Boot 3.x默认依赖版本)已废弃@TypeDef、@TypeDefs和@Type注解,直接删除这些注解即可。

2. 改用Hibernate原生JSON类型映射

Hibernate 6原生支持JSON类型处理,无需依赖第三方库(如原有的hibernate-types),使用@JdbcTypeCode注解指定JSON类型编码即可:

  • 针对PostgreSQL的jsonb类型,使用SqlTypes.JSON作为参数
  • 自定义对象(如PartyResponse)可直接作为字段类型,Hibernate会自动完成序列化与反序列化

3. 升级日期类型(可选但推荐)

Java 8+的时间API(LocalDateTime)比java.util.Date更安全易用,Spring Boot 3.x+Hibernate 6可直接映射该类型,无需再使用@Temporal注解。

修改后的实体类代码

@Getter
@Setter
@Entity
@Table(name = "party_info")
public class PartyInfo implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    @Column(name = "id")
    private Long id;

    @Column(name = "username", length = 48, unique = true, nullable = false)
    private String username;

    @Column(name = "update_on")
    private LocalDateTime updateOn;

    @Column(name = "recorded_at")
    private LocalDateTime recordedAt;

    @JdbcTypeCode(SqlTypes.JSON)
    @Column(columnDefinition = "jsonb", name = "party", length = 500)
    private PartyResponse partyResponse;

}

额外注意事项

  • 确保PartyResponse类是Jackson可序列化的POJO(无需额外实现Serializable,但如果有需要也可添加)
  • 若之前引入了com.vladmihalcea:hibernate-types-xx这类第三方依赖,可直接从项目依赖配置中移除
  • 针对其他数据库的JSON类型,只需调整columnDefinition参数即可(比如MySQL的json类型同样适配SqlTypes.JSON)

内容的提问来源于stack exchange,提问作者Sudan Shrestha

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 08:55:02