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

升级Spring Boot 3/Hibernate 6后List类型AttributeConverter报错求助

解决Spring Boot 3/Hibernate 6中List AttributeConverter启动异常问题

问题原因

Hibernate 6对集合类型的类型推断逻辑发生变化:当属性为List<String>这类集合接口时,Hibernate默认会将其识别为需要集合映射(如@ElementCollection)的类型,而非通过AttributeConverter转换为基础字符串类型,因此抛出Named type [interface java.util.List] did not implement BasicType nor UserType异常。

解决方案(无需自定义类型,保留AttributeConverter)

方案1:将List接口改为具体实现类

把实体类中的List<String>替换为具体的集合实现类(如ArrayList<String>),同时调整转换器的泛型类型:

修改后的实体类属性:

@Column(name = "iface_ids", columnDefinition = "TEXT")
@Convert(converter = StringListToStringConverter::class)
var interfaceIds: ArrayList<String> = arrayListOf()

修改后的转换器:

@Converter
class StringListToStringConverter : AttributeConverter<ArrayList<String>, String> {
    override fun convertToDatabaseColumn(attribute: ArrayList<String>?): String? {
        return attribute?.joinToString(",")
    }

    override fun convertToEntityAttribute(dbData: String?): ArrayList<String>? {
        return dbData?.split(",")?.filter { it.isNotEmpty() }?.let { ArrayList(it) } ?: arrayListOf()
    }
}

方案2:添加@JdbcTypeCode指定JDBC类型

如果不想修改属性的接口类型,可通过@JdbcTypeCode明确指定字段的JDBC类型,让Hibernate知道该属性需要通过转换器转换为文本类型:

修改后的实体类属性:

import org.hibernate.type.SqlTypes

@Column(name = "iface_ids", columnDefinition = "TEXT")
@Convert(converter = StringListToStringConverter::class)
@JdbcTypeCode(SqlTypes.LONGVARCHAR)
var interfaceIds: List<String> = emptyList()

转换器无需修改:

@Converter
class StringListToStringConverter : AttributeConverter<List<String>, String> {
    override fun convertToDatabaseColumn(attribute: List<String>?): String? {
        return attribute?.joinToString(",")
    }

    override fun convertToEntityAttribute(dbData: String?): List<String>? {
        return dbData?.split(",")?.filter { it.isNotEmpty() } ?: emptyList()
    }
}

原理说明

两种方案都是让Hibernate正确识别属性的处理逻辑:

  • 方案1通过具体实现类,避免Hibernate将其识别为集合映射类型;
  • 方案2通过@JdbcTypeCode明确JDBC类型,强制Hibernate使用AttributeConverter完成类型转换。

内容的提问来源于stack exchange,提问作者Dominic Miglar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 14:35:35