當它們出現在的字段/獲取器上時,它們@Entity之間有什么區別?(我通過Hibernate保留了Entity )。它們每個都屬于什么框架和/或規范?@NotNull位于中javax.validation.constraints。在javax.validation.constraints.NotNulljavadoc中說帶注釋的元素不能為null但是它沒有說數據庫中元素的表示形式,那么為什么nullable=false要在列中添加約束呢?
3 回答

互換的青春
TA貢獻1797條經驗 獲得超6個贊
@NotNull是JSR 303 Bean驗證批注。它與數據庫約束本身無關。由于Hibernate是JSR 303的參考實現,因此它會智能地選擇這些約束并將它們轉換為數據庫約束,因此您只需付出1即可獲得兩個。@Column(nullable = false)是JPA聲明列為非空的方法。即,前者用于驗證,而后者則用于指示數據庫架構詳細信息。您將從Hibernate的驗證批注中獲得一些額外的(歡迎使用?。椭?。

冉冉說
TA貢獻1877條經驗 獲得超1個贊
休眠的JPA提供程序的最新版本@NotNull默認將Bean驗證約束(JSR 303)應用于DDL(由于hibernate.validator.apply_to_ddl property默認為true)。但是,不能保證其他JPA提供程序也可以做到這一點。
@NotNull在驗證JVM中的Java bean時,應使用bean驗證批注來確保將bean屬性設置為非空值(這與數據庫約束無關,但在大多數情況下應與它們對應)。
您還應該使用JPA批注,例如@Column(nullable = false)給jpa提供者提示以生成正確的DDL,以創建具有所需數據庫約束的表列。如果您可以或希望依靠像Hibernate這樣的JPA提供程序,該提供程序默認將Bean驗證約束應用于DDL,則可以忽略它們。
添加回答
舉報
0/150
提交
取消