0

我有以下课程:

class User {
 String name
}

class Book {
  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

这是业务逻辑在 Service 类中遇到事务的地方。如果我使用您定义的关系,我会这样做:

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 回答