私はユーザーと組織の間に多対多の関係を持っています。ユーザーが削除されているときに、彼のすべての組織からユーザーを削除したいので、これは基本的に私が思いついたものです:
class User {
...
def beforeDelete() {
def user = User.get(id)
Organization.all.each {
it.removeFromMembers(user)
it.save()
}
}
}
指定されたIDのユーザーがデータベースに存在していてもnullを返すため、これは驚くほど機能しませんUser.get(id)
。ログを見ると、SQLステートメントも実行されていません。そこで、load()
メソッドinstedを使ってみました。その場合、ObjectNotFoundExceptionが結果になります。それで私はかなり必死だったのでこれを試しました:
def user = User.find("from User as u where u.id = ?", [1L])
これは、何らかの理由で機能します。しかし今、この行it.removeFromMembers(user)
はNullPointerExceptionをスローします。
このロジックをUserControllerに入れようとしましたが、機能します。
どうしてこれなの?ドメインクラスでこれを実行できないのはなぜですか?これにより、beforeDelete
フック(および他のすべてのものも)はかなり役に立たなくなります。