2.3.内置约束
Hibernate Validator包含一组常用的基本约束。这些都是由JakartaBean验证规范定义的约束(请参见第2.3.1节,“JakartaBean验证约束”)。此外,Hibernate Validator提供了有用的自定义约束(请参阅第2.3.2节,“附加限制”).
2.3.1.JakartaBean验证约束
下面可以找到JakartaBean验证API中指定的所有约束的列表。所有这些约束都适用于字段/属性级别,在JakartaBean验证规范中没有定义任何类级约束。如果使用Hibernate对象-关系映射程序,则在为模型创建DDL时会考虑到一些约束(参见“Hibernate元数据影响”)。
Hibernate Validator允许将一些约束应用于比JakartaBean验证规范所要求的更多的数据类型(例如,@Max可以应用于字符串)。依赖此特性会影响您的应用程序在JakartaBean验证提供者之间的可移植性。
@AssertFalse
检查带注释的元素是否为false
支持的数据类型
Boolean, boolean
Hibernate元数据影响
无
@AssertTrue
检查带注释的元素是否为真
支持的数据类型
Boolean, boolean
Hibernate元数据影响
无
@DecimalMax(value=, inclusive=)
时,检查带注释的值是否小于指定的最大值。inclusive=假。否则,该值是否小于或等于指定的最大值。参数值是根据BigDecimal字符串表示
支持的数据类型
BigDecimal, BigInteger, CharSequence, byte, short, int, long以及原语类型的相应包装器;另外还受HV支持:Number和javax.money.MonetaryAmount(如果JSR 354 API实现在类路径上)
Hibernate元数据影响
无
@DecimalMin(value=, inclusive=)
时,检查带注释的值是否大于指定的最小值。inclusive=假。否则,该值是否大于或等于指定的最小值。参数值是根据BigDecimal字符串表示
支持的数据类型
BigDecimal, BigInteger, CharSequence, byte, short, int, long以及原语类型的相应包装器;另外还受HV支持:Number和javax.money.MonetaryAmount
Hibernate元数据影响
无
@Digits(integer=, fraction=)
检查带注释的值是否是一个最多可达integer数字和fraction小数位
支持的数据类型
BigDecimalBigInteger, CharSequence, byte, short, int, long以及原语类型的相应包装器;另外还受HV支持:Number和javax.money.MonetaryAmount
Hibernate元数据影响
定义列精度和刻度
@Email
检查指定的字符序列是否为有效的电子邮件地址。可选参数regexp和flags允许指定电子邮件必须匹配的附加正则表达式(包括正则表达式标志)。
支持的数据类型
CharSequence
Hibernate元数据影响
无
@Future
检查注释日期是否在将来。
支持的数据类型
java.util.Date, java.util.Calendar, java.time.Instant, java.time.LocalDate, java.time.LocalDateTime, java.time.LocalTime, java.time.MonthDay, java.time.OffsetDateTime, java.time.OffsetTime, java.time.Year, java.time.YearMonth, java.time.ZonedDateTime, java.time.chrono.HijrahDate, java.time.chrono.JapaneseDate, java.time.chrono.MinguoDate, java.time.chrono.ThaiBuddhistDate;附加由HV支持,如果Joda时间日期/时间API在类路径上:ReadablePartial和ReadableInstant
Hibernate元数据影响
无
@FutureOrPresent
检查注释日期是在现在还是将来。
支持的数据类型
java.util.Date, java.util.Calendar, java.time.Instant, java.time.LocalDate, java.time.LocalDateTime, java.time.LocalTime, java.time.MonthDay, java.time.OffsetDateTime, java.time.OffsetTime, java.time.Year, java.time.YearMonth, java.time.ZonedDateTime, java.time.chrono.HijrahDate, java.time.chrono.JapaneseDate, java.time.chrono.MinguoDate, java.time.chrono.ThaiBuddhistDate;附加由HV支持,如果Joda时间日期/时间API在类路径上:ReadablePartial和ReadableInstant
Hibernate元数据影响
无
@Max(value=)
检查带注释的值是否小于或等于指定的最大值。
支持的数据类型
BigDecimal, BigInteger, byte, short, int, long以及原语类型的相应包装器;另外还受HV支持:CharSequence(由字符序列表示的数值),任何子类型的Number和javax.money.MonetaryAmount
Hibernate元数据影响
在列上添加检查约束。
@Min(value=)
检查带注释的值是否大于或等于指定的最小值。
支持的数据类型
BigDecimal, BigInteger, byte, short, int, long以及原语类型的相应包装器;另外还受HV支持:CharSequence(由字符序列表示的数值),任何子类型的Number和javax.money.MonetaryAmount
Hibernate元数据影响
在列上添加检查约束。
@NotBlank
检查注释的字符序列不为NULL,并且修整的长度大于0。差异@NotEmpty该约束只能应用于字符序列,并且忽略了尾随空格。
支持的数据类型
CharSequence
Hibernate元数据影响
无
@NotEmpty
检查带注释的元素是否为空或空。
支持的数据类型
CharSequence, Collection, Map和阵列
Hibernate元数据影响
无
@NotNull
检查注释的值是否为null
支持的数据类型
任何类型
Hibernate元数据影响
列不可空
@Negative
检查元素是否严格为负值。零值被认为无效。
支持的数据类型
BigDecimal, BigInteger, byte, short, int, long以及原语类型的相应包装器;另外还受HV支持:CharSequence(由字符序列表示的数值),任何子类型的Number和javax.money.MonetaryAmount
Hibernate元数据影响
无
@NegativeOrZero
检查元素是负还是零。
支持的数据类型
BigDecimal, BigInteger, byte, short, int, long以及原语类型的相应包装器;另外还受HV支持:CharSequence(由字符序列表示的数值),任何子类型的Number和javax.money.MonetaryAmount
Hibernate元数据影响
无
@Null
检查带注释的值是否为null
支持的数据类型
任何类型
Hibernate元数据影响
无
@Past
检查带注释的日期是否已过去。
支持的数据类型
java.util.Date,java.util.Calendar, java.time.Instant, java.time.LocalDate, java.time.LocalDateTime, java.time.LocalTime, java.time.MonthDay, java.time.OffsetDateTime, java.time.OffsetTime, java.time.Year, java.time.YearMonth, java.time.ZonedDateTime, java.time.chrono.HijrahDate, java.time.chrono.JapaneseDate, java.time.chrono.MinguoDate, java.time.chrono.ThaiBuddhistDate;附加由HV支持,如果Joda时间日期/时间API在类路径上:ReadablePartial和ReadableInstant
Hibernate元数据影响
无
@PastOrPresent
检查注释日期是过去的还是现在的
支持的数据类型
java.util.Date,java.util.Calendar, java.time.Instant, java.time.LocalDate, java.time.LocalDateTime, java.time.LocalTime, java.time.MonthDay, java.time.OffsetDateTime, java.time.OffsetTime, java.time.Year, java.time.YearMonth, java.time.ZonedDateTime, java.time.chrono.HijrahDate, java.time.chrono.JapaneseDate, java.time.chrono.MinguoDate, java.time.chrono.ThaiBuddhistDate;附加由HV支持,如果Joda时间日期/时间API在类路径上:ReadablePartial和ReadableInstant
Hibernate元数据影响
无
@Pattern(regex=, flags=)
检查带注释的字符串是否与正则表达式匹配。regex考虑给定的标志match
支持的数据类型
CharSequence
Hibernate元数据影响
无
@Positive
检查元素是否严格为正。零值被认为无效。
支持的数据类型
BigDecimal, BigInteger, byte, short, int, long以及原语类型的相应包装器;另外还受HV支持:CharSequence(由字符序列表示的数值),任何子类型的Number和javax.money.MonetaryAmount
Hibernate元数据影响
无
@PositiveOrZero
检查元素是正还是零。
支持的数据类型
BigDecimal, BigInteger, byte, short, int, long以及原语类型的相应包装器;另外还受HV支持:CharSequence(由字符序列表示的数值),任何子类型的Number和javax.money.MonetaryAmount
Hibernate元数据影响
无
@Size(min=, max=)
检查带注释的元素的大小是否介于min和max(包括)
支持的数据类型
CharSequence, Collection, Map和阵列
Hibernate元数据影响
列长度将设置为max
在上面列出的参数之上,每个约束都有参数消息、组和有效载荷。这是JakartaBean验证规范的要求。
2.3.2.附加约束
除了JakartaBean验证API定义的约束之外,Hibernate Validator还提供了以下几个有用的自定义约束。除了一个例外,这些约束也适用于字段/属性级别,仅适用于@ScriptAssert是类级约束。
@CreditCardNumber(ignoreNonDigitCharacters=)
检查带注释的字符序列是否通过Luhn校验和测试。注意,这个验证的目的是检查用户的错误,而不是信用卡的有效性!另见信用卡号码剖析. ignoreNonDigitCharacters允许忽略非数字字符。默认情况是false.
支持的数据类型
CharSequence
Hibernate元数据影响
无
@Currency(value=)
检查注释的货币单位。javax.money.MonetaryAmount是指定货币单位的一部分。
支持的数据类型
任何亚型javax.money.MonetaryAmount(如果JSR 354 API实现在类路径上)
Hibernate元数据影响
无
@DurationMax(days=, hours=, minutes=, seconds=, millis=, nanos=, inclusive=)
带注释的检查java.time.Duration元素不大于由注释参数构造的元素。在下列情况下允许平等inclusive标志设置为true.
支持的数据类型
java.time.Duration
Hibernate元数据影响
无
@DurationMin(days=, hours=, minutes=, seconds=, millis=, nanos=, inclusive=)
带注释的检查java.time.Duration元素不少于由注释参数构造的元素。在下列情况下允许平等inclusive标志设置为true.
支持的数据类型
java.time.Duration
Hibernate元数据影响
无
@EAN
检查带注释的字符序列是否有效。艾恩条形码。类型确定条形码的类型。默认情况是EAN-13。
支持的数据类型
CharSequence
Hibernate元数据影响
无
@ISBN
检查带注释的字符序列是否有效。ISBN. type确定ISBN的类型。默认情况是ISBN-13。
支持的数据类型
CharSequence
Hibernate元数据影响
无
@Length(min=, max=)
验证带注释的字符序列是否在min和max包括在内
支持的数据类型
CharSequence
Hibernate元数据影响
列长度将设置为最大。
@CodePointLength(min=, max=, normalizationStrategy=)
验证带注释的字符序列的代码点长度在min和max包括在内。验证归一化值,如果normalizationStrategy已经设定好了。
支持的数据类型
CharSequence
Hibernate元数据影响
无
@LuhnCheck(startIndex= , endIndex=, checkDigitIndex=, ignoreNonDigitCharacters=)
检查注释字符序列中的数字是否通过Luhn校验和算法(另请参阅Luhn算法). startIndex和endIndex只允许在指定的子字符串上运行算法。checkDigitIndex允许将字符序列中的任意数字用作检查数字。如果未指定,则假定检查数字是指定范围的一部分。最后但并非最不重要,ignoreNonDigitCharacters允许忽略非数字字符。
支持的数据类型
CharSequence
Hibernate元数据影响
无
@Mod10Check(multiplier=, weight=, startIndex=, endIndex=, checkDigitIndex=, ignoreNonDigitCharacters=)
检查注释字符序列中的数字是否通过泛型mod 10校验和算法。multiplier确定奇数的乘数(默认值为3),weight偶数的权重(默认为1)。startIndex和endIndex只允许在指定的子字符串上运行算法。checkDigitIndex允许将字符序列中的任意数字用作检查数字。如果未指定,则假定检查数字是指定范围的一部分。最后但并非最不重要,ignoreNonDigitCharacters允许忽略非数字字符。
支持的数据类型
CharSequence
Hibernate元数据影响
无
@Mod11Check(threshold=, startIndex=, endIndex=, checkDigitIndex=, ignoreNonDigitCharacters=, treatCheck10As=, treatCheck11As=)
检查注释字符序列中的数字是否通过mod 11校验和算法。threshold指定mod11乘法器增长的阈值;如果没有指定值,则乘法器将无限期地增长。treatCheck10As和treatCheck11As当mod 11校验和分别等于10或11时,指定要使用的校验位数。默认值分别为X和0。startIndex, endIndex checkDigitIndex和ignoreNonDigitCharacters的语义与@Mod10Check.
支持的数据类型
CharSequence
Hibernate元数据影响
无
@Normalized(form=)
验证注释的字符序列是否根据给定的form.
支持的数据类型
CharSequence
Hibernate元数据影响
无
@Range(min=, max=)
检查注释的值是否位于(包括)指定的最小值和最大值之间。
支持的数据类型
BigDecimal, BigInteger, CharSequence, byte, short, int, long以及原语类型的相应包装器。
Hibernate元数据影响
无
@ScriptAssert(lang=, script=, alias=, reportOn=)
检查是否可以根据带注释的元素成功地计算给定的脚本。为了使用这个约束,JSR 223定义的Java脚本API的实现(“Java脚本编写”)TM)必须是类路径的一部分。要计算的表达式可以用任何脚本或表达式语言编写,在类路径中可以找到与jsr 223兼容的引擎。reportOn属性报告特定属性(而不是整个对象)上的约束冲突。
支持的数据类型
任何类型
Hibernate元数据影响
无
@UniqueElements
检查带注释的集合是否仅包含唯一元素。相等值是使用equals()方法。默认消息不包括重复元素列表,但可以通过重写消息并使用{duplicates}消息参数重复元素的列表也包含在约束冲突的动态有效负载中。
支持的数据类型
Collection
Hibernate元数据影响
无
@URL(protocol=, host=, port=, regexp=, flags=)
根据RFC 2396检查注释的字符序列是否是有效的URL。如果任何可选参数protocol, host或port则对应的URL片段必须与指定的值匹配。可选参数regexp和flags允许指定URL必须匹配的附加正则表达式(包括正则表达式标志)。默认情况下,此约束使用java.net.URL构造函数来验证给定字符串是否表示有效的URL。基于正则表达式的版本也是可用的-RegexpURLValidator-可以通过XML进行配置(请参见第8.2节,“通过constraint-mappings”)或编程API(请参见第12.15.2节,“以编程方式添加约束定义”).
支持的数据类型
CharSequence
Hibernate元数据影响
无
2.3.2.1.具体国家的制约因素
Hibernate Validator还提供了一些特定于国家的限制,例如社会保障号码的验证。
如果您必须实现特定于国家的约束,请考虑将其作为Hibernate Validator的一个贡献!
@CNPJ
检查附加注释的字符序列是否代表巴西企业纳税者登记号(地籍登记编号为“Pessoa Jurídica”)
支持的数据类型
CharSequence
Hibernate元数据影响
无
国家
巴西
@CPF
检查附加注释的字符序列是否代表巴西纳税人个人注册号码(地籍编号为“Pessoa Física”)
支持的数据类型
CharSequence
Hibernate元数据影响
无
国家
巴西
@TituloEleitoral
检查注释字符序列是否代表巴西选民身份证号码(蒂图洛·埃莱托拉尔)
支持的数据类型
CharSequence
Hibernate元数据影响
无
国家
巴西
@NIP
检查注释的字符序列是否代表波兰增值税标识号(尼普)
支持的数据类型
CharSequence
Hibernate元数据影响
无
国家
波兰
@PESEL
检查注释的字符序列是否代表波兰国民识别号(白塞)
支持的数据类型
CharSequence
Hibernate元数据影响
无
国家
波兰
@REGON
检查注释字符序列是否代表波兰纳税人的识别号(雷贡)。可应用于regon的9位和14位版本。
支持的数据类型
CharSequence
Hibernate元数据影响
无
国家
波兰
@INN
检查注释字符序列是否代表俄罗斯纳税人的识别号(客栈)。可适用于国际客栈的个人版本和法律版本。
支持的数据类型
CharSequence
Hibernate元数据影响
无
国家
俄罗斯