JPA 验证忽略 columnDefinition

问题描述 投票:0回答:1

我在 liquibase 中的 createTable 上得到了以下定义:

<column name="FOO" type="CHAR(3)">
    <constraints nullable="false"/>
</column>

当我在本地 postgres:latest docker 数据库上运行此命令时,数据类型正确设置为 CHAR(3)。

当我现在使用以下内容定义我的实体时:

@Column(name = "FOO", nullable = false, length = 3, columnDefinition = "char")
private String foo;

并在 spring-boot 中启用 jpa-validation 我收到以下错误:

架构验证:在列 [foo] 中遇到错误的列类型 表[my_schema.my_table];找到了 [bpchar (Types#CHAR)],但期待 [char(3)(类型#VARCHAR)]

为什么?我该如何解决这个问题?该字段始终允许正好 3 个字符。

编辑: 没有 bpchar,我认为 hibernate 无法正确识别它:https://docs.jboss.org/hibernate/orm/5.4/userguide/html_single/Hibernate_User_Guide.html#basic-provided

postgresql spring-boot hibernate jpa spring-data-jpa
1个回答
0
投票

Hibernate 在验证中忽略

columnDefinition
,仅用于初始化。要设置列类型,请使用
@JdbcTypeCode
注释:

@JdbcTypeCode(SqlTypes.CHAR)
@Column(name = "FOO", nullable = false, length = 3)
private String foo;
© www.soinside.com 2019 - 2024. All rights reserved.