1

Hibernate と Hibernate Validator 5 に問題があります。たとえば、いくつかのエンティティGroupと別のエンティティがありPersonます。これらは次のように関連しています。グループには、個人への 2 つの参照があります。連絡先担当者とマネージャです。どちらも 1 対 1 の関係であり、完全なカスケードとオーファンの削除オプションがあります。

私が望むのは、グループの保存中に連絡先担当者とマネージャーを検証することです。さらに、別の検証グループを使用して、担当者とマネージャーを検証したいと考えています。これを行うために、連絡先担当者フィールドの前に@ConvertGroup(from = Default.class, to = ContactPersonValidation.class)一緒に配置し@Valid、マネージャー フィールドに対しても同様に行いました (別の検証グループを使用)。

現在、Hibernate の検証は機能しません。グループが で提供されているものに変換されていないことを意味し@ConvertGroupます。Hibernate バリデーターのソース コードをたどったところ、Group オブジェクトと 2 つの Person オブジェクトを別々に検証するようです。したがって、Person 検証は Group オブジェクトからカスケードされず、検証グループは変換されません。

同様の問題を経験したことがあり、その解決方法を知っていますか?

4

1 に答える 1

2

JPA によってトリガーされるライフサイクル検証中に、Bean Validation は、関連TraversableResolver付けが でマークされている場合も関連付けをフォローアップしない を使用します@Valid(JPA 2.0 仕様の 3.6.1.2「ライフサイクル イベント時の自動検証の要件」を参照してください)。

したがって、Personオブジェクトはからの参照をフォローアップすることによって検証されることはありませんが、オブジェクトGroup自体が永続化されたときに検証されます。したがって、 on で宣言されたグループ変換はGroup適用されません。

GroupSequenceProviderを定義することで、必要な動作を実装できますPerson(これは Hibernate Validator 固有の機能であることに注意してください)。そのためには、人物の「役割」をインスタンスに渡す必要があります (たとえば、値Contactとを含む列挙型の形式でManager) PersonPerson次に、既定のグループ シーケンス プロバイダーはロールにアクセスし、特定のインスタンスが永続化されている場合、いずれかの検証グループを適用できます。

于 2013-11-08T14:45:27.070 に答える