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

Hél*_*éla 32 java-ee hibernate-validator bean-validation

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

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;
}
Run Code Online (Sandbox Code Playgroud)

Bal*_*usC 110

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

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

@NotEmpty
private Integer some;
Run Code Online (Sandbox Code Playgroud)

这是完全错误的.整数不能被视为字符串,集合,映射或数组.请改用标准@NotNull.

@NotNull
private Integer some;
Run Code Online (Sandbox Code Playgroud)

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


kam*_*005 14

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

@Size(min = 1, max = 20)
@Column(name = "ID")
private int id;
Run Code Online (Sandbox Code Playgroud)