Нарушены ограничения проверки подлинности bean при выполнении автоматической проверки bean для события обратного вызова: 'prePersist' - PullRequest
12 голосов
/ 28 сентября 2011

Я создал фасад сеанса EJB в моем Netbeans 7 для сохранения своей сущности. У меня есть многозначное сопоставление между моей страховкой и классом RatePlan.

public class Insurance{
    @ManyToOne(optional=false) 
    @JoinColumn(name="PLAN_ID")
    private RatePlan plan;
}
public class RatePlan{
    @OneToMany(mappedBy="plan")
    private Set<Insurance> insuranceItems;
}

Когда я пытался сохранить в своей базе данных, используя EJB Session Bean, я сталкиваюсь с ошибкой ниже.

Вызвано: javax.validation.ConstraintViolationException: Нарушены условия проверки Bean при выполнении автоматической проверки Bean на событие обратного вызова: 'prePersist'. Пожалуйста, обратитесь к встроенным ConstraintViolations для деталей.

Я отключил проверку Бина в моем файле Persistence.xml. Я хотел бы знать, что произошла ошибка проверки Бина, но я не знаю, как и где ее найти или как ее настроить и перехватить.

Мой EJB-фасад - простой класс, подобный TIS.

public class InsuranceFacade{
    public void saveInsurance(Insurance insurance){
        em.persist(insurance);
    }
}

Есть подсказки?

Ответы [ 4 ]

11 голосов
/ 28 сентября 2011

Я хотел бы знать, что произошла ошибка проверки Бина, но я не знаю, как и где ее найти или как ее настроить и перехватить.

Чтобы узнать, какие конкретные нарушения ограниченийпроизошло, вы могли бы просто проверить пойманную исключение.ConstraintViolationException.getConstraintViolations () возвращает набор ConstraintViolation с, который вы можете повторять и проверять.

6 голосов
/ 06 июня 2014

У меня возникла та же проблема, но после нескольких часов поиска ответа, наконец-то я нашел его ... Вы должны отредактировать свой AbstractFacade.java класс и добавить этот код

public void create(T entity) {

    ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
    Validator validator = factory.getValidator();
    Set<ConstraintViolation<T>> constraintViolations = validator.validate(entity);
    if(constraintViolations.size() > 0){
        Iterator<ConstraintViolation<T>> iterator = constraintViolations.iterator();
        while(iterator.hasNext()){
            ConstraintViolation<T> cv = iterator.next();
            System.err.println(cv.getRootBeanClass().getName()+"."+cv.getPropertyPath() + " " +cv.getMessage());

            JsfUtil.addErrorMessage(cv.getRootBeanClass().getSimpleName()+"."+cv.getPropertyPath() + " " +cv.getMessage());
        }
    }else{
        getEntityManager().persist(entity);
    }
}

Теперь этот метод предупредит вас, какое свойство и почему оно не проходит проверку. Я надеюсь, что это работает для вас, как и для меня.

6 голосов
/ 29 апреля 2014
catch (EJBException e) {
        @SuppressWarnings("ThrowableResultIgnored")
        Exception cause = e.getCausedByException();
        if (cause instanceof ConstraintViolationException) {
            @SuppressWarnings("ThrowableResultIgnored")
            ConstraintViolationException cve = (ConstraintViolationException) e.getCausedByException();
            for (Iterator<ConstraintViolation<?>> it = cve.getConstraintViolations().iterator(); it.hasNext();) {
                ConstraintViolation<? extends Object> v = it.next();
                System.err.println(v);
                System.err.println("==>>"+v.getMessage());
            }
        }
        Assert.fail("ejb exception");
    }
0 голосов
/ 25 апреля 2017

Поймать следующее исключение, когда вы сохраняете сущность.В моем случае это метод EJB add.где я делаю em.persist().Затем проверьте журнал сервера, вы увидите, какой атрибут имеет ограничение ограничения.

catch (ConstraintViolationException e) {
       log.log(Level.SEVERE,"Exception: ");
       e.getConstraintViolations().forEach(err->log.log(Level.SEVERE,err.toString()));
    }
...