限制Hibernate在生成DDL时不能识别Validation注释



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

但是,当我在两个数据库上使用mysqldiff工具(hibernate生成的和SchemaExport生成的)来确保hibernate生成数据库和SchemeExport生成的schema 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生成的表具有以下列约束。

`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是非常无用的(@NotNull&nullable = true -> default也是如此),但我的观点是Validation注释应该只用于Validations,数据库相关注释应该只用来生成ddl,对吗。。?我有没有办法告诉hibernate在生成ddl时不要考虑验证注释。。?

我正在使用以下版本的库

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

类似的问题,但有完全相反的需要。我找不到一个合适的/可解释的答案来解释为什么ddl生成会识别它,但SchemaExport工具却没有,或者至少相反。

为什么Hibernate Tools hbm2ddl生成没有考虑Bean验证注释?

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

最新更新