我具有以下域结构:

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

    希望这可以帮助。
    斯文

    09-11 18:39