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

