我在 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
Hibernate 在验证中忽略
columnDefinition
,仅用于初始化。要设置列类型,请使用 @JdbcTypeCode
注释:
@JdbcTypeCode(SqlTypes.CHAR)
@Column(name = "FOO", nullable = false, length = 3)
private String foo;