Hibernate.org社区文档

第四章 额外模块

4.1. Bean 验证
4.1.1. 添加 Bean 验证
4.1.2. 配置
4.1.3. 捕捉违规
4.1.4. 数据库架构
4.2. Hibernate Validator 3
4.2.1. 描述
4.2.2. 与 Hibernate 注释集成
4.3. Hibernate Search
4.3.1. 描述
4.3.2. 与 Hibernate 注释集成

Hibernate 注释主要针对持久化元数据。该项目还与一些外部模块进行了很好的集成。

Bean 验证标准化了域模型级别约束的定义和声明方式。例如,您可以表达某个属性永远不应为 null,帐户余额应严格为正等等。这些域模型约束在 bean 本身中通过注释其属性来声明。然后 Bean 验证可以读取它们并检查约束违规。无需重复任何这些规则(表示层、数据访问层),即可在应用程序的不同层中执行验证机制。遵循 DRY 原则,Bean 验证及其参考实现 Hibernate Validator 的设计正是出于此目的。

Hibernate 和 Bean 验证之间的集成在两个层面进行。首先,它能够检查一个类的内存中实例是否有约束违规。其次,它可以将约束应用于 Hibernate 元模型,并将它们合并到生成的数据库架构中。

每个约束注释都与一个验证器实现相关联,该实现负责检查实体实例上的约束。验证器还可以(可选地)将约束应用于 Hibernate 元模型,允许 Hibernate 生成表达该约束的 DDL。通过适当的事件侦听器,您可以在 Hibernate 执行的插入、更新和删除操作上执行检查操作。

在运行时检查实例时,Hibernate Validator 以一系列 ConstraintViolation 形式返回有关约束违规的信息。除了其他信息之外,ConstraintViolation 还会包含一个错误描述消息,其中可以嵌入带有注释的参数值捆绑(例如大小限制),以及可以外化到 ResourceBundle 的消息字符串。

默认情况下,无需配置。

Default 组在实体插入和更新时经过验证,数据库模型也会根据 Default 组进行相应更新。

您可以通过设置验证模式自定义 Bean 验证集成。使用 javax.persistence.validation.mode 属性,例如可在 persistence.xml 文件或 hibernate.cfg.xml 文件中设置。有多种选项可供选择

如果您希望在插入、更新和删除过程中验证不同的组,请使用

每个属性都接受用逗号 (,) 分隔的验证组的完全限定类名


注意

您可以在 hibernate.cfg.xmlhibernate.properties 或以编程方式中设置这些属性。

注解是一种非常方便和优雅的方式,可为域模型指定不变约束。例如,您可以表达某个属性永远不能为空,账户余额应严格为正等等。这些域模型约束在 bean 本身中通过注解其属性来声明。然后验证器可以读取这些属性并检查约束是否遭到违反。验证机制可以在应用程序的不同层中执行,而无需为任何这些规则(表示层、数据访问层)添加重复项。遵循 DRY 原则,Hibernate Validator 便是出于此目的而设计的。

Hibernate Validator 在两个层级上工作。首先,它能够检查类的不变内存实例约束。其次,它可以将约束应用于 Hibernate 元模型,并将它们合并到生成的数据库架构中。

每个约束注解都与验证器实现相关联,后者负责检查实体实例上的约束。验证器(可选)还可以将约束应用于 Hibernate 元模型,从而允许 Hibernate 生成表达约束的 DDL。使用适当的事件侦听器,可以在 Hibernate 执行的插入和更新操作上执行检查操作。Hibernate Validator 并不限于与 Hibernate 一起使用。您可以在应用程序的任何地方轻松使用它。

在运行时检查实例时,Hibernate Validator 在 InvalidValue 数组中返回有关约束违规的信息。除其他信息外,InvalidValue 包含错误描述消息,可以将参数值捆绑嵌入到注释(例如长度限制)中,并且消息字符串可以外化为 ResourceBundle