javax.servlet.ServletException:HV000030:找不到类型的验证程序:java.lang.Integer

时间:2013-06-12 20:21:35

标签: java-ee bean-validation hibernate-validator

我必须更新数据库中的信息。

FacadePatient.java班级代码:

public Patient update(Patient p) {

    Patient pat = em.find(Patient.class, p.getPatientId());
    p.setPatientPhone(pat.getPatientPhone());
    p.setPatientDateNaiss(pat.getPatientDateNaiss());
    p.setPatientEmail(pat.getPatientEmail());
    p.setPatientJob(pat.getPatientJob());
    p.setPatientSmoking(pat.getPatientSmoking());
    p.setPatientSize(pat.getPatientSize());
    em.merge(pat);
    return p;
}

4 个答案:

答案 0 :(得分:107)

  

HV000030:找不到类型的验证器:java.lang.Integer

当您在Hibernate Validator的使用中使用JSR303 bean验证时会发生这种情况,并且您在JPA实体中具有@NotEmpty属性上的Hibernate特定Integer,如下所示:

@NotEmpty
private Integer some;

这是完全错误的。整数不能视为string, collection, map or array。请改用标准@NotNull

@NotNull
private Integer some;

请注意,具体问题与JSF完全无关。将来,请通过以下方式了解如何尽可能多地排除噪音和naildown的具体问题。单独执行JPA代码。 JSF仅仅是HTTP / MVC信使,PrimeFaces只是HTML / CSS / jQuery / UI代码生成器。

答案 1 :(得分:14)

我想补充一下上面的答案。 当你有一些例如这样的东西时,也会抛出这个异常:

@Size(min = 1, max = 20)
@Column(name = "ID")
private int id;

答案 2 :(得分:3)

您也可能在以下情况下遇到此问题;

@Size(max = 45, message = "Field 'SomeEntityClass.yourEnumType' cannot exceed 45 characters") @Column(length=45)
@Enumerated(EnumType.STRING)
private SomeEnumType yourEnumType;

这是因为在验证时,'yourEnumType'(整数类型)的序数值在Hibernate在将值存储到数据库之前解析的字符串映射之前处理。

答案 3 :(得分:0)

如果存在对整数无效的任何约束,也会引发该错误。就像用以下命令注释整数:

  • @Length(max = 3)
  • @大小