以下三個字段的驗證檢查有什么區別?
@Entity
public class MyEntity {
@Column(name = "MY_FIELD_1", length=13)
private String myField1;
@Column(name = "MY_FIELD_2")
@Size(min = 13, max = 13)
private String myField2;
@Column(name = "MY_FIELD_3")
@Length(min = 13, max = 13)
private String myField3;
// getter & setter
}
我看到第一個與DDL的東西有關.
第二個是用於bean驗證.
第三個是進行hibernate驗證.
那是對的嗎?我還不明白的是:何時需要使用哪一個?什么時候觸發這些注釋之一?
編輯:想想以下情況:
考慮到要開發一個具有長度為13的字符串類型的實體.您會選擇上述哪種方法?甚至更好:你有什么問題要問自己找出哪一個適合你的目的?
> @Column
是一個JPA注釋,並且length屬性由模式生成工具用於設置關聯的SQL列長度.
> [@Size
](javascript:void())是一個Bean驗證注釋,用於驗證關聯的String具有的長度受最小值和最大值限制的值.
> [@Length
](javascript:void())是一個Hibernate特定的注釋,與@Size具有相同的含義
所以2.和3.應該使用Bean驗證來驗證String的長度.我會選擇2.因為它是通用的.
本人注:@length和@size實際使用時的區別
用@length限制長度為100,@length驗證的應該為100個字符的長度,如99個漢字+2個數字,@length並不會報錯;
但用@size限制長度為100,同樣情況下則會報錯,即超出限制長度
綜上,@length限制長度為字符長度,@size限制長度為個數長度,@size為限制長度通用格式