【问题标题】:define one-to-many and many-to-many relationships in grails在grails中定义一对多和多对多关系
【发布时间】:2013-05-29 12:29:11
【问题描述】:

我有两个域:用户和任务,例如:

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


}

我认为我必须定义我的多对多关系的所有者方(assignedTasks-assgnedUsers) ? 任何人都有定义满足我的规范 1) 和 2) 的正确关系的想法吗?

谢谢:)

【问题讨论】:

    标签: grails many-to-many grails-orm one-to-many


    【解决方案1】:

    我认为您可以通过更简单的方式完成此操作:

    真的,关系可以只在任务上。做你想做的事情的唯一原因是建立一个双向关系。这可以通过在用户上声明方法来获得您想要的对象来更简单地实现。

    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]
    }
    

    【讨论】:

      【解决方案2】:

      试试这个。注意 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
        ]
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多