Java SEAM和Hibernate验证

Java SEAM和Hibernate验证,java,jboss6.x,seam2,Java,Jboss6.x,Seam2,Seam 2,Jboss 6.1 我目前在持久性对象上使用Hibernate验证注释和seam在jsf页面上进行验证: @Entity @Table(name = "CLIENT", catalog = "testdb") public class Client implements java.io.Serializable { private Integer id; private String name; @Id @GeneratedVa

Seam 2,Jboss 6.1

我目前在持久性对象上使用Hibernate验证注释和seam在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 party应用程序等。因此,我必须在java代码中进行验证,如下所示:

ValidatorFactory factory = Validation.buildDefaultValidatorFactory();
Validator validator = factory.getValidator();
Set<ConstraintViolation<K>> constraintViolations = validator.validate(bean);
ValidatorFactory=Validation.buildDefaultValidatorFactory();
Validator Validator=factory.getValidator();
Set constraintViolations=validator.validate(bean);
现在,这不会发现任何验证错误,但持久化数据确实会引发异常,因此它确实可以在下面的某个位置工作。我可以使用@org.hibernate.validator.constraints.Length让它工作,但是jsf屏幕不会报告约束问题

在我看来,@org.hibernate.validator.Length是一个旧的hibernate验证程序库,但它与seam 2非常纠缠,因此无法删除


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

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

    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());
    }
}