我一直在使用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?