我有以下课程:
class User {
String name
}
class Book {
User user
}
我希望如果删除User对象,它还会删除包含用户实例的Book对象。由于我没有从User类到book类的关系,cascade delete将无效。
我可以将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 class delete()函数?
我尝试了以下但是失败了。
def delete() {
def books = Book.findAllByUser(this)
books.each { it.delete(flush: true) }
}
super.delete(flush: true)
答案 0 :(得分: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()
}
}
然后从控制器调用此服务。
可以说,如果某本书确实属于某个用户,请定义该关系的两面,并且它应该级联。