到目前为止,我一直在使用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的应用。