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

PostgreSQL设置TEXT类型仍报varchar(255)长度超限Spring Data JPA问题

解决方案

问题根因说明

  1. 你当前数据库表的description字段实际为varchar(100000)类型,修改实体类注解后没有同步更新表结构,因此长度超出限制时依然会报错。
  2. 使用@Lob注解时,PostgreSQL默认将Lob映射为OID类型的外置大对象,字段中存储的是大对象的ID而非文本内容,Session关闭后无法读取对应流数据,因此序列化时会抛出流访问异常。
  3. 仅设置@Column(columnDefinition="TEXT")未指定类型映射时,部分Hibernate版本会优先使用默认字符串映射规则,依然会按照varchar类型处理。

正确配置步骤

1. 实体类注解配置

Hibernate 5.x版本:

import org.hibernate.annotations.Type;
import javax.persistence.Column;

// 省略类其他代码
@Type(type = "org.hibernate.type.TextType")
@Column(columnDefinition = "TEXT")
private String description;

Hibernate 6.x版本:

import org.hibernate.annotations.JdbcTypeCode;
import org.hibernate.type.SqlTypes;
import jakarta.persistence.Column;

// 省略类其他代码
@JdbcTypeCode(SqlTypes.LONGVARCHAR)
@Column(columnDefinition = "TEXT")
private String description;

2. 同步更新数据库表结构

执行以下SQL手动修改字段类型(生产环境建议提前备份数据):

ALTER TABLE public.detail ALTER COLUMN description TYPE TEXT USING description::TEXT;

如果是开发环境,也可以开启spring.jpa.hibernate.ddl-auto=update,重启项目后会自动更新字段类型。

配置验证

配置完成后重新写入大文本数据即可正常存取,TEXT类型在PostgreSQL中支持最大1GB的文本存储,完全满足常规大文本需求,且为行内存储,序列化时不会出现流访问异常。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 23:39:03