0

私は次のクラスを持っています:

class User {
 String name
}

class Book {
  User user
}

User オブジェクトを削除すると、ユーザー インスタンスを含む Book オブジェクトも削除されます。User クラスから book クラスへの関係がないため、カスケード削除は機能しません。

Book クラスは次のように記述できます。

class Book {
  belongsTo = [user: User]
}

前者もカスケード削除を行いません。これは、User クラスにまだリレーションが定義されていないためです。

私がしたことは次のとおりです。

class User {
 String name

 def deleteUser() {
   def books = Book.findAllByUser(this)
   books.each { it.delete(flush: true) }
 }
 delete(flush: true)
}

これが最善の解決策だとは思いません。代わりに何ができますか?User クラスの delete() 関数を何とか拡張する方法はありますか?

以下を試しましたが、失敗します。

 def delete() {
   def books = Book.findAllByUser(this)
   books.each { it.delete(flush: true) }
 }
 super.delete(flush: true)
4

1 に答える 1

0

これは、サービス クラス内でビジネス ロジックがトランザクションと出会う場所です。あなたが定義したように関係を使用していた場合、これを行う方法は次のとおりです。

def UserService {

  static transactional = true

  def delete(Long userId) {
      def user = User.get(userId)
      def userBooks = Book.findAllByUser(user)
      userBooks*.delete()
      user.delete()
  }

}

そして、コントローラーからこのサービスを呼び出すだけです。

おそらく、書籍が実際にユーザーに属している場合は、関係の両側を定義し、カスケードする必要があります。

于 2013-10-28T17:24:14.897 に答える