我一直在用 hbm2ddl=update
到目前为止都是数据库创建。但现在我们要移除 hbm2ddl
性质和用途 SchemaExport
hibernate的工具,用于创建基于hibernate注解模型类的sql语句。schemaexport现在也完成了。
但是当我通过使用确保hibernate生成的数据库和schemeexport生成的schemasql是相同的 mysqldiff
在两个数据库(hibernate-generated和schemaexport-generated)上,很少有不具有相同类型约束的列。
假设采用以下模型
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
),但我的观点是验证注解应该只用于验证,而数据库相关注解应该只用于ddl生成,对吗。。?我有没有办法告诉hibernate在ddl生成过程中不要考虑验证注解。。?
我正在使用以下版本的库
Hibernate 4.2.7
Spring 4.1.4 (Java based Bean configs, no hibernate.cfg.xml)
类似的问题,但需求正好相反。我找不到一个合适的/可解释的答案来解释为什么ddl生成能够识别它,而schemaexport工具却不能,或者至少相反。
为什么hibernate工具hbm2ddl生成没有考虑bean验证注解?
1条答案
按热度按时间iecba09b1#
通过将属性\u hibernate.validator.apply \u to \u ddl设置为false,可以禁用对ddl应用bean验证约束。