web-dev-qa-db-ja.com

javax.servlet.ServletException:HV000030:タイプJava.lang.Integerのバリデーターが見つかりませんでした

データベースの情報を更新する必要があります。

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;
}
32
Héla

HV000030:タイプのバリデーターが見つかりませんでした:Java.lang.Integer

これは、Hibernate ValidatorのフレーバーでJSR303 Bean検証を使用し、JPAエンティティに次のようなIntegerプロパティのHibernate固有の@NotEmptyがある場合に発生します。

@NotEmpty
private Integer some;

これは完全に間違っています。整数を 文字列、コレクション、マップ、または配列 と見なすことはできません。代わりに標準の@NotNullを使用してください。

@NotNull
private Integer some;

具体的な問題はJSFとはまったく関係がないことに注意してください。将来的には、可能な限りノイズを排除し、具体的な問題を特定する方法を学んでください。 JPAコードを個別に実行します。ここでJSFは単なるHTTP/MVCメッセンジャーであり、PrimeFacesは単なるHTML/CSS/jQuery/UIコードジェネレーターです。

107
BalusC

上記の回答に追加したいと思います。この例外は、たとえば次のようなものがある場合にもスローされます。

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

以下のような場合にもこの問題が発生する可能性があります。

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

これは、検証時に、 'yourEnumType'(整数型)の序数値が、値をデータベースに保存する前にHibernateが解決する文字列マッピングよりも先に処理されるためです。

3
Bell Katapa

また、整数に対して無効な制約が存在する場合、そのエラーがスローされます。整数に注釈を付けるような:

  • @Length(最大= 3)
  • @サイズ
0
cabaji99