Java 如何删除grails中的多个关系而不删除belongto
我有以下几种情况Java 如何删除grails中的多个关系而不删除belongto,java,grails,Java,Grails,我有以下几种情况 class User{ String name static constraints = { details nullable: true } static hasMany = [details: Details] } class Details{ String applicationID static constraints = { images nullable: true } static belongsTo = [user: User] static has
class User{
String name
static constraints = {
details nullable: true
}
static hasMany = [details: Details]
}
class Details{
String applicationID
static constraints = {
images nullable: true
}
static belongsTo = [user: User]
static hasMany = [images: Images]
}
class Images{
String applicationImage
}
我有一个用户有许多详细信息,详细信息有许多图像。当我尝试删除用户时,请获取java.util.ConcurrentModificationException。如何删除用户
def deleteUser()
User user=User.get(params.id)
if(user.details) {
Details details = Details.get(user.details.id)
if(user.details.images) {
def detls= Details.findAllByDetails(details)
detls.each {
def image = it.images
if(image) {
Details detailsInstance = Details.get(it.id)
image.each { im ->
Image image1 = Image.get(im.id);
println(image1)
detailsInstance.removeFromImages(image1)
image1.delete(flush: true)
}
detailsInstance.save(flush: true, failOnError: true)
}
}
}
user.delete(flush:true)
}
好的,首先,控制器中的代码与域类的代码不匹配(例如,域类的名称不匹配)。这可能就是我无法复制ConcurrentModificationException的原因 这取决于删除用户时要执行的操作。如果您只想删除用户及其详细信息,而不想删除图像,只需执行以下操作即可
def delete() {
User user = User.get(params.id)
user.delete(flush: true)
}
如果您还想删除他的图像,可以添加
static belongsTo = [detail: Detail]
转到Image类。在这种情况下,图像将通过级联删除(请参阅以获得更好的理解)
如果您想在某些情况下保留图像,可以这样做:
User user = User.get(params.id)
def images = []
if (user) {
user.details.each { detail ->
detail.images.each { image ->
images.add(image)
}
}
user.delete(flush: true)
images*.delete(flush: true)
}
@布山:你能用我的答案解决这个问题吗?