0

我试图从一个有很多关系中删除一个对象。用户有一个对象叫来宾,来宾有一个有很多叫孩子的对象,见下图:

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)

没有成功。我还进行了适当的检查以确保子实例包含在来宾中并且匹配

Child.get(params.id)

有任何想法吗?

4

1 回答 1

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()

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

于 2013-02-12T17:55:26.970 回答