无法从列表中删除

时间:2013-02-12 17:27:18

标签: grails

我正在尝试从多个关系中删除一个对象。 用户有一个名为guest的对象,guest有一个有很多叫做孩子的对象,请看:#/ p>

class User {

    transient springSecurityService

    String username
    String password
    String email
    boolean enabled
    boolean accountExpired
    boolean accountLocked
    boolean passwordExpired
    Guest guest
}

旅客:

class Guest {

    static hasMany = [children:Child]

    static constraints = {
    }
}

我使用以下内容添加子项:

User.guest.addToChildren(Child.get(params.id))

这非常有效。但我无法做到以下几点:

User.guest.removeFromChildren(Child.get(params.id))

我也试过

Guest guest = User.guest
guest.removeFromChildren(Child.get(params.id))
guest.save(flush: true, failOnError: true)

没有成功。我还进行了适当的检查,以确保子实例包含在guest虚拟机中并匹配

Child.get(params.id)

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

你问题的神秘部分是你从哪里获得用户?它可能是一个分离的实例,可能会导致您的问题。我会尝试以下方法:

Guest guest = User.guest.merge()  // make sure Guest has a hibernate context
Child child = Child.get(params)
guest.removeFromChildren(child)
// don't believe what the docs tell you
// I always have to delete the instance I am removing
// from the collection
child.delete()

在服务方法中执行此操作或使用事务闭包将其包围。