我有以下情景
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
}
我有一个用户,其中有许多详细信息和详细信息有很多Images.when我试图删除用户get 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)
}
答案 0 :(得分:0)
好的,首先,控制器中的代码与您的域类的代码不匹配(例如,域类的名称不匹配)。这可能就是我无法重现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)
}