2013-05-29 144 views
0

我有兩個域:用戶和任務,例如:定義一個一對多和多對一的許多Grails中關係

1)一個用戶可以是許多任務提交

2)用戶可以參加許多任務,在同一時間,一個任務可以有其參與

很多用戶的話,我希望定義一個一對多1)和2一個多到多)

User{ 
    static hasMany = [createdTasks : Task, //for one-to-many 
        assignedTasks : Task //for many-to-many 
        ] 

    static mappedBy = [createdTasks : author] 

} 

Task{ 

    User author 
    static hasMany = [assignedUsers : User]// for many-to-many 


} 

我想我必須定義t他是我多對多關係的所有者一方(assignedTasks-assgnedUsers) ? 任何人都有一個想法來定義滿足我的規範1)和2)的正確關係?

謝謝:)

回答

0

我認爲你可以做到這一點更簡單的方法:

真正的關係,可以只是在工作。做你正在嘗試做的唯一理由是創建一個雙向關係。這可以通過在用戶上聲明方法來獲得所需對象來簡化。

User{ 
    Set<Task> getCreatedTasks() { 
    Task.findAllByAuthor(this) 
    } 

    Set<Task> getAssignedTasks() { 
    Task.executeQuery(""" 
     Select t 
     from Task t join t.assignedUsers as tu 
     where tu = :user 
    """, [user: this]) 
    } 
} 

Task{ 
    User author 
    static hasMany = [assignedUsers : User] 
} 
0

試試這個。注意mappedBy中的引用。

User { 
    static hasMany = [ 
    createdTasks: Task, // for one-to-many 
    assignedTasks: Task // for many-to-many 
    ] 
    static mappedBy = [ 
    createdTasks: 'author' 
    ] 
} 

Task { 
    User author 
    static hasMany = [ 
    assignedUsers: User // for many-to-many 
    ] 
    static belongsTo = [ 
    User 
    ] 
}