gpt4 book ai didi

java - SEAM 和 Hibernate 验证

转载 作者:行者123 更新时间:2023-12-01 15:15:37 24 4
gpt4 key购买 nike

Seam 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 个字符时,会显示一个不错的错误。

问题是用户在其他 channel 提交数据,即电子表格导入、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 注释进行验证。

最佳答案

无需手动调用 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());
}
}

关于java - SEAM 和 Hibernate 验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11648080/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com