到目前为止,我一直在使用hbm2ddl=update来创建数据库。但是现在,我们将删除hbm2ddl属性,并使用Hibernate的SchemaExport工具创建基于Hibernate注释模型类的sql语句。SchemaExport现在也完成了。
但是,当我在两个数据库(hibernate生成和SchemeExport生成)上使用mysqldiff工具确保hibernate生成的数据库和SchemaExport生成的模式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 NULLSchemeExport生成的架构具有以下构造。
`first_name` varchar(255) DEFAULT NULL,
`someField` varchar(50) DEFAULT NULL因此很明显,Hibernate生成数据库在ddl生成(wrong)期间也会考虑bean验证,而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?
发布于 2016-03-29 09:06:07
通过将属性_hibernate.validator.apply_to_ddl_设置为false,可以禁用Bean验证约束到DDL的应用程序。
https://stackoverflow.com/questions/36260033
复制相似问题