2013-02-12 66 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() 

而且在服務方法做到這一點還是與交易封閉圍繞着它。