2016-03-28 76 views
0

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

回答

1

您可以通過屬性_hibernate.validator.apply_to_ddl_設置爲禁用Bean驗證約束的DDL的應用程序。