3.2.2.12. Hibernate Validator 4 への移行

概要

Hibernate Validator 4.x は、JSR 303 - Bean Validation を実装する完全に新しいコードベースです。Validator 3.x から 4.x への移行プロセスは非常に簡単ですが、アプリケーションの移行時にいくつかの変更を行う必要があります。

手順3.18 以下の 1 つまたは複数のタスクを実行する必要がある場合があります。

  1. デフォルトの ValidatorFactory へのアクセス

    JBoss Enterprise Application Platform 6 は、デフォルトの ValidatorFactory を java:comp/ValidatorFactory 以下にある JNDI コンテキストにバインドします。
  2. ライフサイクルでトリガーされた検証の理解

    Hibernate Core 4 と組み合わせて使用する場合、ライフサイクルベースの検証は Hibernate Core により自動的に有効になります。
    1. 検証は、エンティティー INSERT 操作、UPDATE 操作、および DELETE 操作に対して行われます。
    2. 次のプロパティーを使用してイベントタイプによってグループが検証されるよう設定することができます。
      • javax.persistence.validation.group.pre-persist
      • javax.persistence.validation.group.pre-update
      • javax.persistence.validation.group.pre-remove
      これらのプロパティーの値は、検証するグループの、カンマで区切られた完全修飾クラス名です。
      検証グループは、Bean Validation 仕様の新しい機能です。この新しい機能を使用しない場合は、Hibernate Validator 4 に移行するときに変更を必要としません。
    3. ライフサイクルベース検証は、javax.persistence.validation.mode プロパティーを none に設定することにより無効できます。このプロパティーの他の有効値は auto (デフォルト値)、callback、および ddl です。
  3. アプリケーションが手動の検証を使用するよう設定

    1. 検証を手動で制御する場合、次のいずれかの方法で Validator を作成できます。
      • getValidator() メソッドを使用して ValidatorFactory から Validator インスタンスを作成します。
      • Validator インスタンスを EJB、CDI Bean、または他の Java EE の挿入可能なリソースに挿入します。
    2. Validator インスタンスをカスタマイズするために、ValidatorFactory.usingContext() により返された ValidatorContext を使用できます。この API を使用して、カスタム MessageInterpolatorTraverableResolver、および ConstraintValidatorFactory を設定できます。これらのインターフェースは、Bean Validation 仕様で指定され、Hibernate Validator 4 で新しい機能です。
  4. 新しい Bean Validation の制約を使用するようコードを変更

    Hibernate Validator 4 への移行時に、新しい Bean レベル検証制約では、コードの変更が必要です。
    1. Hibernate Validator 4 にアップグレードする場合は、次のパッケージの制約を使用する必要があります。
      • javax.validation.constraints
      • org.hibernate.validator.constraints
    2. Hibernate Validator 3 に存在していたすべての制約は、Hibernate Validator 4 でも引き続き利用できます。これらを使用するには、指定されたクラスをインポートし、場合によっては、制約パラメーターの名前またはタイプを変更する必要があります。
  5. カスタム制約の使用

    Hibernate Validator 3 では、カスタム制約でorg.hibernate.validator.Validator インターフェースを実装する必要がありました。Hibernate Validator 4 では、javax.validation.ConstraintValidator インターフェースを実装する必要があります。このインターフェースには、以前のインターフェースと同じ initialize() メソッドと isValid() メソッドが含まれますが、メソッドシグネチャーが変更されました。また、代替の DDL は Hibernate Validator 4 でサポートされなくなりました。