java - 托管实体上的 Bean 验证

标签 java hibernate bean-validation hibernate-validator

在其余的 ubdate 请求中,首先我从数据库读取相关对象,第二次使用 dozer 框架标准映射器 DozerBeanMapper 将 dto 映射到刚刚读取的 dbObject 。接下来,我尝试验证新的映射对象,但验证失败,因为一个字段注释为 @NotEmpty(message = "Name不能为空") 似乎为空,我知道发生这种情况是因为 dbObject 是一个动态代理对象,引用我的由 hibernate 处理的实体,是否存在使用 hibernate validator 验证使用 hibernate.validator.constaints 注释的托管 bean 的任何方式。

@PUT
public Response update(QueryDTO dto) throws   ServiceException {
    log.info("Request for upadating   query");

     Query dbObject= this.persistenceService.find( Query.class,dto.getSystemId());
     if(dbObject.getVersion()!=dto.getVersion()){
          throw new InvalidVersionException("Db version is" + dbObject.getVersion());
     }
    this.mapper.map(dto,dbObject);


    Set<ConstraintViolation<Query>>  validationResult= this.validator.validate(dbObject);
    if(!validationResult.isEmpty()){
        throw new ValidationException(StringifyUtil.buildExceptionMessage(validationResult));
    }

    Query updatedObject=   this.persistenceService.update(dbObject);
    return ok(updatedObject);
}

最佳答案

在 BeanValidation API 中,TraversableResolver 用于检查 validator 是否可以访问某个属性。根据您使用的 hibernate validator 版本,有解决此问题的 Hibernate/JPA 实现。

参见http://docs.oracle.com/javaee/7/api/javax/validation/TraversableResolver.html https://docs.jboss.org/hibernate/validator/5.0/api/org/hibernate/validator/internal/engine/resolver/package-summary.html

您可以通过这种方式配置 TraversableResolver

    final Configuration<?> conf = Validation.byDefaultProvider().configure();
    conf.traversableResolver(new MyTraversableResolver());
    ValidatorFactory validatorFactory = conf.buildValidatorFactory();

参见https://docs.jboss.org/hibernate/validator/5.0/reference/en-US/html/chapter-bootstrapping.html#d0e4238用于引导 validator

关于java - 托管实体上的 Bean 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26648936/

相关文章:

java - Java 声明式(基于注释)缓存解决方案

java - 每个键的 map 值总和

java - JPA @Embedded 注释的 JAXB 等效项

java - PostgreSQL 串行类型的 Hibernate 注释

mysql - openshift平台无法连接MYSQL数据库

java - 如何在运行时决定约束 validator 类?

java - 如何减少 OpenJDK Java8 VM 的启动时间?

hibernate - java.lang.IllegalArgumentException : Unknown entity in Spring + Hibernate Application 异常

java - hibernate @OneToOne @NotNull

java - JSR303 Bean Validation,如何知道违反了什么类型约束