【发布时间】:2016-07-15 13:49:36
【问题描述】:
到目前为止,我一直在使用hbm2ddl=update 创建数据库。但是现在我们要删除hbm2ddl 属性,使用Hibernate 的SchemaExport 工具来创建基于Hibernate Annotated 模型类的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 生成的表具有以下列约束。
`first_name` varchar(255) NOT NULL,
`someField` varchar(20) DEFAULT NULL
SchemeExport 生成的 Schema 具有以下约束。
`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 也是如此),但我的观点是验证注释应该只用于验证和与数据库相关的注释应该只用于 ddl 生成吧..?有什么方法可以告诉 hibernate 在 ddl 生成期间不要考虑验证注释..?
我正在使用以下版本的库
Hibernate 4.2.7
Spring 4.1.4 (Java based Bean configs, no hibernate.cfg.xml)
类似的问题,但需求正好相反。我找不到合适/可解释的答案来说明为什么 ddl 生成可以识别它,但 SchemaExport 工具却不能识别它,或者至少相反。
Why does Hibernate Tools hbm2ddl generation not take into account Bean Validation annotations?
【问题讨论】:
标签: java hibernate bean-validation hbm2ddl