通常の実行時またはデバッグ時に.contains()
、ドメイン クラスのリレーションシップの 1 つを呼び出しても同じように動作しないという問題があります。hasMany
状況は次のとおりです。
2 つのドメイン オブジェクトA
とB
. A
とhasMany
関係がありB
ます。
class A {
...
static hasMany = [bees: B]
...
}
ここで、フィルターの 1 つの実行中に、Spring セキュリティ サービスから現在のユーザーを取得します。このユーザーには、 の 1 つのインスタンスも含まれていますB
。私のフィルターがすべきことはB
、ユーザーの のインスタンスが のインスタンスに含まれているかどうかを確認することですA
。
のインスタンスが実際には同じオブジェクトを参照していると仮定しB
ます (それらは同じであるため)。
さて、問題が発生します。呼び出し:
if (instanceOfA.bees.contains(user.instanceOfB)) {
println 'success'
} else {
println 'failure'
}
failure
通常の(またはコードをステップ実行せずにデバッグする)実行中に出力されます。ただし、そこにブレークポイントを置いてコードをステップスルーすると、正しく実行されてcontains()
出力されsuccess
ます。
これを解決しようとしても実装equals
しましたが、同じ動作をします。hashCode
compareTo