我有以下情况
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)
}




