在find中调用contains()方法

时间:2014-09-25 15:13:33

标签: grails gorm grails-2.0

我有以下域名结构:

class Emloyee {

  static hasMany = [users: User]
  .....  

}

我想编写一个

的方法
  1. 从拥有它的员工中删除用户
  2. 删除用户
  3. 我的代码如下:

    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)
    }
    

    这段代码给了我一个例外:

    No signature of method: grails.gorm.DetachedCriteria.contains() is applicable for argument types: (User)
    

    我做错了什么?谢谢!

1 个答案:

答案 0 :(得分:1)

用户是否始终包含一名员工?

然后你可以使用

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)
}

希望这会有所帮助。 斯文