Hibernate ClassValidator getInvalidValues ​​не дает ошибок - PullRequest
0 голосов
/ 02 ноября 2011

Следующий код не дает никаких недопустимых значений, даже если я заполняю модель недопустимыми значениями.

private static ClassValidator<User> userValidator = new ClassValidator<User>(User.class);
InvalidValue[] errors = userValidator.getInvalidValues(user);
List<String> err = new ArrayList<String>();
for (InvalidValue invalidValue : errors) {
    System.out.println(invalidValue.getMessage());
}

Добавление класса сущности User, как требуется в комментариях.

@Entity(name = "User")
@NamedQueries({
        @NamedQuery(name = MWQueries.nqAllUsers, query = "from User"),
        @NamedQuery(name = MWQueries.nqUserById, query = "from User where id = ?")
})
public class User implements Serializable {

    private static final long serialVersionUID = -5013553611664469461L;

    private Long id;
    private String userName;
    private String email;
    private Role role;
    private @XStreamOmitField String passWord;


    public User() {
    }


    @Id
    @GeneratedValue
    public Long getId() {
        return id;
    }


    public void setId(Long id) {
        this.id = id;
    }


    @Column
    @Length(min = 6, max = 20)
    @NotBlank
    @NotEmpty
    public String getUserName() {
        return userName;
    }


    public void setUserName(String userName) {
        this.userName = userName;
    }


    @Column
    @Length(min = 6)
    @NotBlank
    @NotEmpty
    @JsonIgnore
    public String getPassWord() {
        return passWord;
    }


    public void setPassWord(String passWord) {
        this.passWord = passWord;
    }


    @Column
    public Role getRole() {
        return role;
    }


    public void setRole(Role role) {
        this.role = role;
    }


    @Column(unique = true)
    @Email
    @NotBlank
    @NotEmpty
    public String getEmail() {
        return email;
    }


    public void setEmail(String email) {
        this.email = email;
    }
}

Ответы [ 2 ]

1 голос
/ 03 ноября 2011

Единственный совет, который я могу вам дать, это попробовать немного по-другому.Если проверка этого теста работает, то проблема заключается в том, как вы используете валидатор.Если это не работает, то проблема где-то в вашей сущности

import javax.validation.ConstraintViolation;
import javax.validation.Validation;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;


/** given: an invalid object */
    Demo invalid = new Demo("Hallo Welt");

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

    /** then there must not be constraint violation */
    Set<ConstraintViolation<Demo>> result = validator.validate(invalid);
0 голосов
/ 15 ноября 2011

Вызов кода валидатора гибернации уровня приложения после проверки ограничений javax подтверждает валидацию гибернации.

public Validity validate(T bean, Class<T> beanClass) {
    List<String> err = new ArrayList<String>();
    ValidatorFactory validatorFactory = Validation.buildDefaultValidatorFactory();
    javax.validation.Validator validator = validatorFactory.getValidator();

    Set<ConstraintViolation<T>> violations = validator.validate(bean);
    for (ConstraintViolation<T> violation : violations) {
        String propertyPath = violation.getPropertyPath().toString().toLowerCase();
        String message = violation.getMessage();
        String errMsg = WordUtils.capitalize(propertyPath) + " " + message;

        Log.error(EntityValidator.class, "Invalid Value: '" + errMsg);
        err.add(errMsg);
    }

    // Checking for hibernate validations
    err.addAll(hValidate(bean, beanClass));

    return new Validity(err.isEmpty(), err);
}


public List<String> hValidate(T bean, Class<T> beanClass) {
    List<String> err = new ArrayList<String>();
    ClassValidator<T> hValidator = new ClassValidator<T>(beanClass);

    InvalidValue[] hErrs = hValidator.getInvalidValues(bean);

    for (InvalidValue invalidValue : hErrs) {
        err.add(invalidValue.getMessage());
        Log.error(EntityValidator.class, "Invalid Value: '" + invalidValue.getMessage());
    }

    return err;
}
...