限制 Hibernate 不识别 DDL 生成上的验证注解

Restrict Hibernate to not recognize Validation annotations on DDL generation

到目前为止,我一直在使用 hbm2ddl=update 创建数据库。但是现在我们要删除 hbm2ddl 属性 并使用 Hibernate 的 SchemaExport 工具基于 Hibernate 注释模型 类 创建 sql 语句。 SchemaExport 现在也已完成。

但是当我通过在两个数据库(hibernate 生成和 SchemaExport 生成)上使用 mysqldiff 工具来确保 hibernate 生成的数据库和 SchemeExport 生成的模式 sql 相同时,只有几列没有相同类型的约束。

假设采用以下模型

public class User {

    @Id
    // some generation strategy
    private int id;

    @Column(name = "first_name")
    @NotNull
    private String firstName;

    @Column(name = "someField", length = 50)
    @Size(min = 3, max = 20)
    private String someField;

}

Hibernate 生成的 table 具有以下列约束。

`first_name` varchar(255) NOT NULL,
`someField` varchar(20) DEFAULT NULL

SchemeExport 生成的架构具有以下约束。

`first_name` varchar(255) DEFAULT NULL,
`someField` varchar(50) DEFAULT NULL

所以很明显,Hibernate 生成数据库在 ddl 生成期间也考虑了 bean 验证 (wrong),而 SchemaExport 只考虑了与数据库相关的注释 (right)。

我知道使用 max = {x} 限制列值,但定义 length = >max 非常无用(@NotNullnullable = true -> default 也是如此),但我的观点是验证注释应该只用于验证和数据库相关的注释应该只用于 ddl 生成吧..?有什么方法可以告诉 hibernate 在 ddl 生成期间不要考虑验证注释吗?

我正在使用以下版本的库

Hibernate 4.2.7
Spring 4.1.4 (Java based Bean configs, no hibernate.cfg.xml)

类似的问题,但需求完全相反。我找不到一个 suitable / 可解释的答案来说明为什么 ddl 生成可以识别它而不是 SchemaExport 工具或者至少相反。

Why does Hibernate Tools hbm2ddl generation not take into account Bean Validation annotations?

您可以通过将 属性 _hibernate.validator.apply_to_ddl_ 设置为 false 来禁用对 DDL 的 Bean 验证约束应用。