通常の実行時またはデバッグ時に.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しましたが、同じ動作をします。hashCodecompareTo