0

私は次のドメインエンティティを持っています:

class Customer {

   // Customer properties...

   static belongsTo [user: User]
}

class User {

   // User properties...

}

Customerエラーのあるインスタンスを含むインスタンスを検証しようとするとUser、検証は成功します。私のユニットテストでは:

Customer customer = new Customer()
// Set customer properties...

User user = new User()
// Set user properties that contain errors...

customer.user =  user

assertFalse user.validate()     // succeeds
assertFalse customer.validate() // fails!

ランタイムアプリケーションでも同じ動作が見られます。アプリケーションをデバッグモードで実行し、ユーザーのエラープロパティがnullであることを確認しました。

また、カスタマーインスタンス(ドキュメントによると、とにかくデフォルト設定です)でvalidate(deepValidate:true)を呼び出しようとしましたが、成功しませんでした。

任意のヒント?

4

1 に答える 1

0

grailsがデフォルトでネストされたオブジェクトに検証をカスケードしない理由、または少なくとも私の例では機能しない理由はまだわかりません。

しかし、私は私のために働く次の回避策を見つけました。親クラスで、次のバリデーターを定義します。

class Customer {

  static belongsTo = [user:User]

  static constraints {
    user: nullable: false, validator: {it?.validate()}
  }
}

顧客インスタンスでvalidate()が呼び出されると、関連付けられたユーザーも検証されます。

于 2012-11-06T07:07:18.867 に答える