2013-10-29 157 views
4

我有兩個域類User和Node。以下條件應成立。GORM不依賴刪除的關係

  • 用戶可以有零或一個節點
  • 一個節點可以有一到N個用戶(它總是與用戶實例初始化)
  • ,如果你刪除一個節點的用戶不會被刪除
  • ,如果你刪除一個用戶節點的引用將被刪除

我想:

class User { 
    Node node 
} 

class Node { 

    // constructor 
    Node(User user) { 
    addToUsers(user) 
    save() 
    } 

    hasMany = [users: User] 
} 

前者不起作用。它不起作用,因爲當你刪除一個節點時,在用戶實例中有一個依賴的引用不會被自動刪除。

如何在這種情況下建模域類?

+0

什麼它「不起作用」? –

+0

@JamesKleeh我更新了我的問題。 – confile

+0

用戶表發生了什麼?如果在刪除節點時存在外鍵,則node_id不可能存在。 –

回答

2

使用一個連接表是這樣的:

class User { 
    Set<Node> getNodes() { 
     UserNode.executeQuery("select x.node from UserNode x where x.user = :user", [user: this]) 
    } 

    def addToNodes(Node node) { 
     def userNode = new UserNode() 
     userNode.user = this 
     userNode.node = node 
     userNode.save()  
    } 
} 


class Node { 
     Set<User> getUsers() { ... } 
} 

class UserNode { 
    User user 
    Node node 
} 
0

馬克node爲可爲空,並添加cascade映射到用戶類,指定你想要的操作進行級聯:

class User { 
    Node node 

    static constraints = { 
     node nullable: true 
    } 

    static mapping = { 
     node cascade: 'save-update,delete' 
    } 

} 
+0

但我不希望節點被刪除,如果一個用戶被刪除。如果沒有更多的用戶關聯到節點,我希望節點被刪除。 – confile