3.2.2.12. 移植到 Hibernate Validator 4
介绍
Hibernate Validator 4.x 采用了完全新的代码,它实现了 JSR 303 - Bean Validation。从 Validator 3.x 到 4.x 的移植过程非常直观,但在移植时您必须进行一些修改。
过程 3.17. 您可能需要执行一个或多个下面的任务:
访问默认的 ValidatorFactory
JBoss EAP 6 捆绑了一个默认的 ValidatorFactory 到java:comp/ValidatorFactory下的 JNDI 上下文。理解生命周期触发的检验
和 Hibernate Core 4 一起使用时,Hibernate Core 将自动启用基于生命周期的检验。- 检验发生在实体
INSERT、UPDATE和DELETE操作上。 - 您可以配置组通过使用下列属性的事件类型来检验:这些属性的值是用逗号隔开的、要检验的组的全限定类名。
javax.persistence.validation.group.pre-persist,javax.persistence.validation.group.pre-update,和javax.persistence.validation.group.pre-remove。
Validation 组是 Bean Validation 规格的一个新功能。如果您不想利用这个功能,移植到 Hibernate Validator 4 时无需进行任何修改。 - 您可以设置
javax.persistence.validation.mode属性为none来禁用基于生命周期的检验。这个属性的其他值还有auto(默认值),callback和ddl。
配置您的应用程序以使用手动检验
- 如果您想手动控制检验,您可以用下列方法创建一个 Validator:
- 用
getValidator()方法从ValidatorFactory创建一个Validator实例。 - 注入 Validator 实例到 EJB、CDI Bean 或其他 Java EE 可注入的资源。
- 您可以使用
ValidatorFactory.usingContext()返回的ValidatorContext来定制您的 Validator 实例。使用这个 API,您可以配置一个自定义的MessageInterpolator、TraverableResolver和ConstraintValidatorFactory。Bean Validator 规格里指定了这些接口,在 Hibernate Validator 4 里它们是新的接口。
修改代码以使用新的 Bean Validation 约束
当移植到 Hibernate Validator 4 时新的 Bean 级别的检验约束需要修改代码。- 要升级到 Hibernate Validator 4,您必须使用下列包里的约束:
javax.validation.constraintsorg.hibernate.validator.constraints
- Hibernate Validator 3 里所有的约束在 Hibernate Validator 4 里仍然可用。要使用它们,您需要导入指定的类,且在某些情况下,修改其约束参数的名称或类型。
使用自定义的约束
在 Hibernate Validator 3 里,自定义的约束需要实现org.hibernate.validator.Validator接口。 在 Hibernate Validator 4 里,您需要实现javax.validation.ConstraintValidator接口。这个接口包含了和以前接口相同的initialize()和isValid()方法,但方法签名有了变动。此外,Hibernate Validator 4 不再支持DDL修改。