2013-02-12 77 views
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) 

任何想法?

回答

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

而且在服务方法做到这一点还是与交易封闭围绕着它。