我具有以下域结构:
class Emloyee {
static hasMany = [users: User]
.....
}
我想编写一个方法
我的代码如下:
def deleteUser(User userInstance) {
def employee = Employee.find { users.contains(userInstance) }
employee .removeFromUsers(userInstance)
employee .save(flush: true, failOnError: true)
userInstance.delete(flush: true, failOnError: true)
}
这段代码给了我一个异常(exception):
No signature of method: grails.gorm.DetachedCriteria.contains() is applicable for argument types: (User)
我做错了什么?谢谢!
最佳答案
用户是否总是包含一个员工?
那你可以用
static belongsTo = [employee: Employee]
在您的用户域类中。在这种情况下,您无需从员工域中手动删除用户。调用userInstance.delete(...)时,GORM会将其删除
如果您不想使用belongsTo,则可以通过以下方式删除用户:
def deleteUser(User userInstance) {
def c = Employee.createCriteria()
def result = c.get {
users {
idEq(userInstance.id)
}
}
result.removeFromUsers(userInstance)
userInstance.delete(flush: true, failOnError: true)
}
希望这可以帮助。
斯文