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

Spring Boot Starter Validation搭配PostgreSQL时DDL执行失败问题

问题分析与解决

错误根源

问题核心在于:Usuarios类里的imagen字段是String类型,但你给它加了@Min(1)和@Max(7)注解。Hibernate会把这两个数值校验注解转换成数据库的CHECK约束,生成check (imagen>=1 AND imagen<=7)这样的DDL语句。

PostgreSQL对类型一致性要求严格,不允许直接拿字符串(character varying)和整数做比较,所以报错。而H2数据库类型转换比较宽松,自动帮你做了类型转换,所以之前没暴露这个问题。

解决方案

根据业务需求,有两种处理方式:

方式一:把字段改成数值类型(推荐,符合语义)

如果imagen本来就是用来存储1-7的数字,直接把字段类型从String改成Integer,保留@Min和@Max注解:

@NotNull
@Min(1)
@Max(7)
@Column(nullable=false)
private Integer imagen;

这样生成的CHECK约束是整数之间的比较,PostgreSQL能正常执行DDL创建表。

方式二:保留String类型,改用正则校验

如果必须用String类型存储(比如存的是"1"到"7"的字符串),就不能用@Min/@Max,换成@Pattern注解做正则验证:

@NotNull
@Pattern(regexp = "^[1-7]$")
@Column(nullable=false)
private String imagen;

这个正则会限制字符串只能是1到7的单个字符,同时Hibernate不会生成错误的CHECK约束,避免数据库报错。

内容的提问来源于stack exchange,提问作者Adonis Becerra Morales

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.08 10:35:04