grails - 多对多和映射问题

标签 grails orm mapping many-to-many

这是我的第一个具有多对多关系的项目,在阅读了一些 ORM 的 grails 资料后,我决定让 grails 为我完成工作,比如创建表。实际上,我的交易是:

  • 1 用户有多个组
  • 1 组属于一个用户,有很多用户(除了所有者)

  • 这是我的类(class):
    class User {  
        String name
        List groups
    
        static hasMany = [groups : Group]
    
        static mapping = {
            table 'users'
            version false
        }
    }
    
    class Group {   
        String name
        List members
    
        static belongsTo = User
        static hasMany = [members : User]
    
        static mapping = {
            table 'groups'
            version false
        }
    }
    

    在那之后,我从 grails 得到的是 3 张 table 。 用户 table 还可以,但接下来的 2 不是我所期望的。
    table **groups** |  id  |  name
    table **users_groups** |  group_id  |  user_id  |  members_idx  |  groups_idx
    

    好吧,我想要的是这样的:
    table **groups** |  id  |  name  |   user_id 
    table **users_groups** |  group_id  |  members_idx  |  groups_idx
    

    我不知道我是否做错了什么或如何解决它,但无论如何......当我尝试执行 user.addToGroups(new Group()) 时,我仍然遇到另一个问题。我的 用户组 表复制了这个寄存器,一个是 members_idx 为空,另一个是 groups_idx 为空。

    最佳答案

    如何从组中删除 belongsTo 并离开 hasMany:

    class User {  
        String name
        List groups
    
        static hasMany = [groups : Group]
    
        static mapping = {
            table 'users'
            version false
        }
    }
    
    class Group {   
        String name
        List members
    
        static hasMany = [members : User]
    
        static mapping = {
            table 'groups'
            version false
        }
    }
    

    编辑
    我认为您必须创建一个域类,它实际上将加入组和用户。
    我认为你应该试试这个:
        class User {  
            String name
    
            static hasMany = [groups : UsersGroups]
    
            static mapping = {
                table 'users'
                version false
            }
        }
    
    class Group {   
        String name
    
        static hasMany = [members : UsersGroups]
    
        static mapping = {
            table 'groups'
            version false
        }
    }
    
    class UsersGroups {
    
       static belongsTo = [group: Group, user: User]
       static mapping = {
          version false
       }
    
    }
    

    它将创建另一个实际连接组和用户的表。

    关于grails - 多对多和映射问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4716413/

    相关文章:

    php - 将 Zend_Db 与 ORM 类混合

    nhibernate - 流畅的 nhibernate 映射公式

    MySQL GIS 和 Spatial Extensions - 如何映射区域并针对它们进行查询

    Python 双向映射

    grails - 与Grails开发数据库混淆

    java - 对象/关系映射

    java - 无法将 Groovy 代码编译成 java 类文件

    java - 枚举上的 JPQL LIKE 表达式

    loops - 如何使用<g:each>标签遍历单个元素Grails-Gsp的属性

    grails - 使用默认索引方法的Grails连字符URL转换器问题