Example usage for org.hibernate.cfg.beanvalidation HibernateTraversableResolver HibernateTraversableResolver

List of usage examples for org.hibernate.cfg.beanvalidation HibernateTraversableResolver HibernateTraversableResolver

Introduction

In this page you can find the example usage for org.hibernate.cfg.beanvalidation HibernateTraversableResolver HibernateTraversableResolver.

Prototype

public HibernateTraversableResolver(EntityPersister persister,
            ConcurrentHashMap<EntityPersister, Set<String>> associationsPerEntityPersister,
            SessionFactoryImplementor factory) 

Source Link

Usage

From source file:com.mpe.common.validation.BeanValidationEventListener.java

License:Open Source License

private <T> void validate(T object, EntityMode mode, EntityPersister persister,
        SessionFactoryImplementor sessionFactory, GroupsPerOperation.Operation operation) {
    if (object == null || mode != EntityMode.POJO) {
        return;//  www. j a  v a  2  s  .  c  om
    }
    TraversableResolver tr = new HibernateTraversableResolver(persister, associationsPerEntityPersister,
            sessionFactory);
    Validator validator = factory.usingContext()
            .messageInterpolator(
                    new ResourceBundleMessageInterpolator(new PlatformResourceBundleLocator("globalMessages")))
            .traversableResolver(tr).getValidator();
    final Class<?>[] groups = groupsPerOperation.get(operation);
    if (groups.length > 0) {
        final Set<ConstraintViolation<T>> constraintViolations = validator.validate(object, groups);
        if (constraintViolations.size() > 0) {
            /*Set<ConstraintViolation<?>> propagatedViolations =
                  new HashSet<ConstraintViolation<?>>( constraintViolations.size() );
            Set<String> classNames = new HashSet<String>();
            for ( ConstraintViolation<?> violation : constraintViolations ) {
               LOG.trace( violation );
               propagatedViolations.add( violation );
               classNames.add( violation.getLeafBean().getClass().getName() );
            }
            StringBuilder builder = new StringBuilder();
            builder.append( "Validation failed for classes " );
            builder.append( classNames );
            builder.append( " during " );
            builder.append( operation.getName() );
            builder.append( " time for groups " );
            builder.append( toString( groups ) );
            builder.append( "\nList of constraint violations:[\n" );
            for (ConstraintViolation<?> violation : constraintViolations) {
               builder.append( "\t" ).append( violation.toString() ).append("\n");
            }
            builder.append( "]" );
                    
            throw new ConstraintViolationException(
                  builder.toString(), propagatedViolations
            );*/
            Set<ConstraintViolation<?>> propagatedViolations = new HashSet<ConstraintViolation<?>>(
                    constraintViolations.size());
            StringBuilder builder = new StringBuilder();
            for (ConstraintViolation<?> violation : constraintViolations) {
                builder.append(violation.getMessage()).append("\n");
            }

            logger.info("CCC >> " + builder.toString());

            throw new ConstraintViolationException(builder.toString(), propagatedViolations);

        }
    }
}