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
相关产品推荐
相关产品推荐

