在grails中删除时违反了完整性约束

在grails中删除时违反了完整性约束,grails,grails-2.0,grails-domain-class,Grails,Grails 2.0,Grails Domain Class,我有以下域类 class User{ static hasMany = [servers: Server] static mapping = { servers cascade: 'all-delete-orphan' } } class Server{ int sid } 当我删除服务器时,我得到 违反完整性约束(XXXXXX.xxxxxxxx)-找到子记录 如何向grails中的外键添加cascadeondelete约束。您定义了用户和服

我有以下域类

class User{
    static hasMany = [servers: Server]

    static mapping = {
        servers cascade: 'all-delete-orphan'
    }
}

class Server{
    int sid
}
当我删除服务器时,我得到

违反完整性约束(XXXXXX.xxxxxxxx)-找到子记录


如何向grails中的外键添加
cascadeondelete
约束。

您定义了
用户
服务器
之间的单向关系。由于
服务器
不知道与其相关的
用户
,因此需要执行以下操作:

def user = User.get(123L)

def server = user.servers.find { it.sid == 321 }

if (server) {
  user.removeFromServers(server) 
  user.save()
  server.delete()
}

不确定这是否是解决方案,但您必须在服务器类中执行
static belongsTo=User
,否则服务器可能会被其他用户引用,因此无法轻松删除。另一个提示:如果服务器类只包含一个int,那么您可以删除该类并使用GORMs特性进行如下映射:
static hasMany=[servers:Integer]