我有以下情况

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 
} 

我有一个具有许多Details的用户,而Details具有许多Images.when,当我尝试删除用户时,会遇到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) 
} 

请您参考如下方法:

好的,首先,来自 Controller 的代码与域类的代码不完全匹配(例如,域类的名称不匹配)。这可能就是为什么我无法重现ConcurrentModificationException的原因。

这取决于删除用户时要执行的操作。如果您只想删除用户及其详细信息,而不要删除图像,则只需删除

def delete() { 
    User user = User.get(params.id) 
    user.delete(flush: true) 
} 

如果您还想删除他的图像,可以添加一个
static belongsTo = [detail: Detail] 

转到Image类。在这种情况下,图像将通过级联删除(请参阅 http://spring.io/blog/2010/07/02/gorm-gotchas-part-2/以获取更好的理解)

如果您想在某些情况下保留图像,可以这样做:
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) 
} 


评论关闭
IT序号网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!