Quarkus 3.0中H2自定义方言registerColumnType方法过时如何重构?
Quarkus 3.0.x 适配:重构过时的 registerColumnType 方法
Quarkus 3.x 依赖的 Hibernate ORM 6.x 重构了类型映射体系,原有的 registerColumnType 方法已被标记为过时,需要改用新的 API 完成自定义方言的适配。
重构方案一:注册 SQL 类型描述符
如果是要指定数据库 BINARY 类型对应的处理逻辑,直接用 addSqlTypeDescriptor 替换原有方法:
import org.hibernate.dialect.H2Dialect; import org.hibernate.type.SqlTypes; import org.hibernate.type.descriptor.sql.VarbinarySqlTypeDescriptor; public class H2CustomDialect extends H2Dialect { public H2CustomDialect() { super(); // 将 SqlTypes.BINARY 映射到数据库的 varbinary 类型 addSqlTypeDescriptor(SqlTypes.BINARY, VarbinarySqlTypeDescriptor.INSTANCE); } }
重构方案二:关联 Java 类型与 SQL 类型
如果是要把 Java 中的二进制类型(比如 byte[])持久化为数据库的 varbinary,可以用 registerJavaTypeDescriptor 来关联:
import org.hibernate.dialect.H2Dialect; import org.hibernate.type.SqlTypes; import org.hibernate.type.descriptor.java.BinaryTypeDescriptor; import org.hibernate.type.descriptor.sql.VarbinarySqlTypeDescriptor; public class H2CustomDialect extends H2Dialect { public H2CustomDialect() { super(); // 关联Java二进制类型与数据库varbinary类型 registerJavaTypeDescriptor(BinaryTypeDescriptor.INSTANCE, VarbinarySqlTypeDescriptor.INSTANCE); } }
关键变化说明
- 用
org.hibernate.type.SqlTypes替代了旧的java.sql.Types常量,这是 Hibernate 6.x 统一的类型常量定义 - 新的 API 基于类型描述符(
SqlTypeDescriptor/JavaTypeDescriptor)设计,更清晰地区分数据库端和应用端的类型映射逻辑
内容的提问来源于stack exchange,提问作者Sunfile
相关产品推荐
相关产品推荐

