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

Spring Boot 3中PostgreSQL text[]列转List<String>属性报错求助

问题:PostgreSQL text[]映射到Hibernate List时的Schema验证错误

环境信息

  • Spring Boot 3.2.3
  • Hibernate 6.4.4
  • PostgreSQL 数据库
  • Hypersistence Utils 依赖:
<dependency>
  <groupId>io.hypersistence</groupId>
  <artifactId>hypersistence-utils-hibernate-63</artifactId>
  <version>3.7.3</version>
</dependency>

实体配置

用户尝试映射的实体属性代码:

@Type(ListArrayType.class)
@Column(columnDefinition = "text[]")
@Basic()
private List<String> myColumn = new ArrayList<>();

数据库列定义

my_column text[] COLLATE pg_catalog."default" DEFAULT '{someValue}'::text[],

报错信息

Caused by: org.hibernate.tool.schema.spi.SchemaManagementException: Schema-validation: wrong column type encountered in column [my_column] in table [my_table]; found [_text (Types#ARRAY)], but expecting [text[] (Types#OTHER)]

解决方法

问题核心是Hibernate 6.x的类型注解变化和PostgreSQL数组类型的匹配问题,调整注解配置即可解决:

方案1:移除多余的@Type注解(推荐)

Hibernate 6.x已内置对PostgreSQL text[]到List<String>的映射支持,无需显式指定ListArrayType,直接简化配置:

@Column(columnDefinition = "text[]")
private List<String> myColumn = new ArrayList<>();

方案2:使用Hibernate 6.x兼容的@Typed注解(若需保留Hypersistence Utils的类型)

Hibernate 6.x中@Type已被@Typed替代,若仍想使用Hypersistence Utils的ListArrayType,替换注解即可:

@Typed(ListArrayType.class)
@Column(columnDefinition = "text[]")
private List<String> myColumn = new ArrayList<>();

方案3:显式指定JDBC类型代码

如果自动映射仍有问题,可添加@JdbcTypeCode指定数组类型:

@Column(columnDefinition = "text[]")
@JdbcTypeCode(Types.ARRAY)
private List<String> myColumn = new ArrayList<>();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.28 07:55:11