Я бы попытался изолировать это поведение на уровне DAO приложения.
Используя ваш пример, мы получили бы:
public class MyValidationBeanDAO {
public void persist(MyValidationBean element) throws DAOException{
Set<ConstraintViolation> constraintViolations = validator.validate(element);
if(!constraintViolations.isEmpty()){
throw new DAOException("1234", contraintViolations);
}
// it's ok, just persist it
session.saveOrUpdate(element);
}
}
И следующий класс исключений:
public class DAOException extends Exception {
private final String errorCode;
private final Set<ConstraintViolation> constraintViolations;
public DAOException(String errorCode, Set<ConstraintViolation> constraintViolations){
super(String.format("Errorcode %s", errorCode));
this.errorCode = errorCode;
this.constraintViolations = constraintViolations;
}
// getters for properties here
}
Вы можете добавить некоторую информацию аннотации, основанную на том, какое свойство здесь не проверено, но всегда делайте это с помощью метода DAO.
Надеюсь, это помогло.