Spring Boot 3.0.9迁移遇Cannot resolve method 'type'错误,求替代方案
Spring Boot 3.0.9中替换@Type(type="org.hibernate.type.ClassType")的解决方案
Spring Boot 3.0.x 对应的 Hibernate 版本为 6.x,该版本重构了类型系统,原 @Type(type = "...") 的写法已被废弃,因此会出现 Cannot resolve method 'type' 错误。针对持久化 Class<T> 类型的场景,可通过以下两种方式替换:
方案一:使用@JdbcTypeCode指定SQL类型
直接指定数据库存储的SQL类型,Class 类型会被序列化为全类名字符串,用字符串类型存储即可:
@Column(name = "USER_TYPE") @JdbcTypeCode(SqlTypes.VARCHAR) private Class<T> user;
注:SqlTypes 需导入 org.hibernate.type.SqlTypes 包。
方案二:使用@Type指定类型实现类(Hibernate 6写法)
如果需要显式指定类型实现类,Hibernate 6中保留了 ClassType,但需改用 @Type 的 value 属性指定:
@Column(name = "USER_TYPE") @Type(value = org.hibernate.type.ClassType.class) private Class<T> user;
两种方式均可实现原功能,推荐使用方案一,更贴合Hibernate 6的新规范。
内容的提问来源于stack exchange,提问作者Peter Penzov
相关产品推荐
相关产品推荐

