gpt4 book ai didi

grails - 如何删除具有多对多关系的grails域对象?

转载 作者:行者123 更新时间:2023-12-02 14:31:18 24 4
gpt4 key购买 nike

class Client {

String name
String surname
String address
static hasMany = [departments:Department]

}

class Department {

/*static constraints = {
}*/
String depName
String location
static hasMany = [clients:Client]
static belongsTo = Client
}

def deleteDepartment(){
def values = params.list('departments')
def checkedID = new Integer[values.size()]
for(int i=0; i<values.size(); i++){
String temp = values.get(i).toString()
checkedID[i] = temp.toInteger()
}

for(int i=0; i<checkedID.length; i++){
def department = Department.get(checkedID[i])
department.clients.clear() //something
department.save() //wrong
}
}

客户有很多部门。如何删除与客户端域类有关系的部门域对象,而不删除客户端域对象?

最佳答案

这是一个普遍的问题。建立多对多关系时

您的案例将创建三个tables client,即“部门and client_department”。

现在,当您尝试删除部门时。 Hibernate尝试从部门表中删除部门。

这将失败,因为其条目已使用外键引用保存在client_department表中。

理想情况下,这应该首先删除映射条目,然后从表中删除部门。但这不是它的工作方式。

因此,维护多对多关系的一个不错的解决方法是将这种映射关系掌握在自己的手中,如下所示。

Client{}
Department{}
ClinetDepartment{
Client client;
Department department;
}

但是,这将迫使您也独立保存对象。

喜欢
client.save();
department.save();
new ClinetDepartment(client,department).save();

在删除时可以做
clinetDepartment.delete();
department.delete();

关于grails - 如何删除具有多对多关系的grails域对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29073896/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com