我發現代碼實體類:任何理由把@NotNull註釋上@Id領域的Java實體類
@Id
@NotNull
@Column(name = "ID")
private Long id;
是@NotNull標註有值時@Id已經設置?
我發現代碼實體類:任何理由把@NotNull註釋上@Id領域的Java實體類
@Id
@NotNull
@Column(name = "ID")
private Long id;
是@NotNull標註有值時@Id已經設置?
@NotNull
是爲了進行驗證,如@Size
。它爲驗證引擎定義規則來檢查用戶輸入是否正常。圍繞這些註釋做驗證並不一定表明該對象也是JPA對象,但這兩者經常一起使用。
如果您使用的是javax.validation而不是依靠數據庫級別的失敗(約束違規)來指示空值,那麼您應該同時使用這兩個註釋。
謝謝+1。最直接的答案。 – gavenkoa
我的理解是這是用於靜態分析,並沒有與hibernate/orm做關係。它是否是intellij特定的註釋?
因此,在編譯時,當您要將NULL指定爲已註釋爲@NotNull的字段時,可能會發出警告。
而且任何依賴的代碼都知道返回值永遠不會爲空。
它來自JSR303(Bean Validation),它與JPA一樣也是Java EE的一部分。 – BalusC
由於id/primary key
是表中最重要的field,因此uniquely
標識表中的一行。因此它不應該是null
。
@Id
用於
* Specifies the primary key of an entity.
* The field or property to which the <code>Id</code> annotation is applied
* should be one of the following types: any Java primitive type;
* any primitive wrapper type;
* <code>String</code>;
* <code>java.util.Date</code>;
* <code>java.sql.Date</code>;
* <code>java.math.BigDecimal</code>;
* <code>java.math.BigInteger</code>.
所以也沒有采取空值的照顧。爲了防止空值@NotNull
與@Id
一起使用。
是的,這將使你的ID字段不可爲空,你必須強制它。
但如果你要ID爲自動增量然後將其刪除,並添加
@GeneratedValue(策略= GenerationType.AUTO)
如果您使用數據庫自動增量值或序列,則不應使用'@NotNull'註釋。當你嘗試堅持實體時它會拋出一個異常。 – greenkode
Hm ...我簡化了代碼,但原來的代碼有'@ SequenceGenerator'和'@ GeneratedValue',並且在運行時沒有任何插入錯誤...看起來不同的庫和版本的行爲不同。感謝您的關注。 +1。 – gavenkoa