0

接缝 2,Jboss 6.1

我目前在我的持久性对象上使用 Hibernate 验证注释,并在我的 jsf 页面上进行验证:

@Entity
@Table(name = "CLIENT", catalog = "testdb")
public class Client implements java.io.Serializable {

private Integer             id;
private String              name;

@Id
@GeneratedValue(strategy = IDENTITY)
@Column(name = "ID", unique = true, nullable = false)
public Integer getId() {
    return this.id;
}

@Column(name = "NAME", unique = true, nullable = false, length = 64)
@org.hibernate.validator.Length(min=4,max=64)
public String getName() {
    return this.name;
}

...Setters and rest
}

这非常有效,当名称字段长度小于 4 个字符时,会显示一个很好的错误。

问题是用户在其他渠道提交数据,即电子表格导入、3de 方应用程序等。因此我必须在我的 java 代码中进行如下验证:

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<K>> constraintViolations = validator.validate(bean);

现在这不会发现任何验证错误,但是持久化数据确实会引发异常,因此它确实可以在某个地方工作。我可以通过使用 @org.hibernate.validator.constraints.Length 让它工作,但是 jsf 屏幕不会报告约束问题。

在我看来,@org.hibernate.validator.Length 是一个旧的 Hibernate Validator 库,但它与接缝 2 非常纠缠,因此无法删除。

任何人都知道如何在 java 代码中使用遗留的 hibernate 注释进行验证。

4

1 回答 1

1

无需手动调用休眠验证。在保存时处理错误

    try {
        save();
    } catch (InvalidStateException e) {
        logHibernateValidationException(e);
        ...

private void logHibernateValidationException(InvalidStateException e) {
    for (InvalidValue invalidValue : e.getInvalidValues()) {
        LOGGER.warn("Validation Failed. Instance of bean class: {0} has an invalid property: {1} with message: {2}",
                invalidValue.getBeanClass().getSimpleName(),
                invalidValue.getPropertyName(),
                invalidValue.getMessage());
    }
}
于 2012-10-04T08:15:58.373 回答