Лучшая регистрация валидации бина Hibernate JPA - PullRequest
0 голосов
/ 11 марта 2011

Я, должно быть, что-то упустил, но очень трудно понять, что на самом деле не прошло проверку JPA для спящего режима.

При сбое проверки для аннотаций JPA в спящем режиме вы получаете исключение, например:

javax.validation.ConstraintViolationException: validation failed for classes [com.evocatus.domain.Sauce] during persist time for groups [javax.validation.groups.Default, ]

, что крайне бесполезно.

Вы можете включить ведение журнала для чего-либона самом деле ошибка проверки происходит через log4j:

<logger name="org.hibernate.cfg.beanvalidation.BeanValidationEventListener">
    <level value="TRACE" />
</logger>

ДА, то есть TRACE .

Я должен что-то упустить.Есть ли лучший способ получить лучшие сообщения об ошибках при регистрации ошибок?Это для службы REST.

Ответы [ 3 ]

2 голосов
/ 11 марта 2011

Вам необходимо получить набор фактических ConstraintViolations . ConstraintViolationException имеет метод getConstraintViolations () , который возвращает Set> .Возможно, записанное сообщение об исключении могло бы быть лучше; -)

1 голос
/ 11 марта 2011

Я предполагаю, что вы не используете какую-либо инфраструктуру, которая имеет непосредственное отношение к BeanValidation (например, JSF 2), и по этой причине вы не видите никаких деталей.Если вы используете простой Hibernate с BeanValidation, вам нужно выполнить проверку самостоятельно (обычно перед попыткой сохранения).Тогда у вас будет доступ к Validator объекту, из которого вы сможете получить реальное сообщение.Смотрите этот пример из документации по Hibernate Validator:

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();

Car car = new Car(null);

Set<ConstraintViolation<Car>> constraintViolations = validator.validate(car);

assertEquals(1, constraintViolations.size());
assertEquals("may not be null", constraintViolations.iterator().next().getMessage());
0 голосов
/ 12 сентября 2012

Следующий код напечатает ошибки проверки в вашем коде, из которых вы можете найти, где проблема

    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    Validator validator = factory.getValidator();
    Set<ConstraintViolation<Notice>> constraintViolations = validator.validate(notice);
    for (ConstraintViolation cv : constraintViolations) {
        System.out.println("ValidatationConstraint: " + cv.getConstraintDescriptor().getAnnotation());
        System.out.println("ValidatationConstraint: " + cv.getConstraintDescriptor());
        System.out.println("ValidatationConstraint: " + cv.getMessageTemplate());
        System.out.println("ValidatationConstraint: " + cv.getInvalidValue());
        System.out.println("ValidatationConstraint: " + cv.getLeafBean());
        System.out.println("ValidatationConstraint: " + cv.getRootBeanClass());
        System.out.println("ValidatationConstraint: " + cv.getPropertyPath().toString());
        System.out.println("ValidatationConstraint: " + cv.getMessage());
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...