我一直在使用hbm2ddl=update
来创建数据库,直到现在。但是现在我们将删除hbm2ddl
属性并使用Hibernate的SchemaExport
工具来创建基于Hibernate Annotated模型类的sql语句。 SchemaExport现在也完成了。限制Hibernate无法识别DDL代的验证注释
但是当我确保Hibernate生成的数据库和SchemeExport生成模式SQL是由相同的两个数据库使用mysqldiff
工具(Hibernate生成& SchemaExport工具生成的),还有一些不具有同一种约束几列。
假设采取以下模型
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有以下constrinats。
`first_name` varchar(255) DEFAULT NULL,
`someField` varchar(50) DEFAULT NULL
所以这是很明显,休眠代数据库中提取Bean验证也考虑到了DDL生成(wrong
)期间的SchemaExport时只需要在数据库相关的注解考虑(right
)。
我知道限制使用max = {x}
的列值,但定义length = >max
是相当无用的(这同样适用于@NotNull
& nullable = true -> default
),但我的观点是验证注解应该只被用于验证和数据库相关型号标注只应该用于生成DDL对..?有没有什么办法可以告诉冬眠在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?