GORM不会在两个类之间的一对多关系中创建表

时间:2017-07-20 08:55:49

标签: grails gorm

我是grails的新手,我试图用它创建一些东西,但是在域设计中遇到了重大问题。

基本上我想制作一个这样的结构:

用户有很多篮子

篮子有很多用户,里面有很多盒子,可以有很多珠宝

一个盒子在篮子里面,里面有许多珠宝

每颗宝石都有很多主人。

用户可以创建一个篮子,在篮子里面他可以放(创建)一个盒子,在一个盒子里面可以放(创建)一个宝石,可以添加/删除其他用户(也成为所有者) 对于篮子和珠宝,如果他从篮子中移除所有权,其他用户仍然拥有篮子,如果没有人拥有篮子,篮子就会消失。

用户可以删除一个盒子,并且在篮子里面的珠宝里面有一个珠宝,用户可以在盒子里编辑一个宝石。

我带来了这些域名,但它们似乎不起作用,当我创建一个篮子时,它不会将自己添加到用户篮子列表中,也不会填充篮子UserList。

class User{

    String name

    static hasMany = [basketList: Basket, jewelList: Jewel, kanbanCards: KanbanCard]

    }

class Basket{

    String name

    static hasMany = [userList: User, boxList: Box, jewelList: Jewel]

    }

class Box{

    String name
    static belongsTo = Basket
    static hasMany = [jewelList: Jewel]

    }


class Jewel{

    String name
    static belongsTo = Basket
    static hasMany = [userList: User]

    }

这些域名中哪一个是对的?我失踪了它的工作原理?

修改

所以现在我修改了这样的域名:

class User{

    String name

    static hasMany = [basketList: Basket, jewelList: Jewel, kanbanCards: KanbanCard]
    static mapping = { //added joinTable proprerty for many-to-many
        basketList joinTable: [name: "mm_user_basket", key: 'mm_user_id' ]
    }

    }

class Basket{

    String name

    static belongsTo = User //added belongsTo
    static hasMany = [userList: User, boxList: Box, jewelList: Jewel]

    static mapping = { //added joinTable proprerty for many-to-many
        userList joinTable: [name: "mm_user_basket", key: 'mm_basket_id' ]
    }

}

class Box{

    String name
    static belongsTo = Basket
    static hasMany = [jewelList: Jewel]

    }


class Jewel{

    String name
    static belongsTo = Basket
    static hasMany = [userList: User]

    }

当我尝试创建一个篮子(使用脚手架创建方法)我有所有用户的列表,我选择其中一个,但是当我保存时,它创建一个新的篮子,只有一个名称没有用户关联它

1 个答案:

答案 0 :(得分:0)

用户或购物篮必须拥有"拥有"关系,以便新对象级联到关系。

所以你必须添加到Basket类:

static belongsTo = User

您可以在此处阅读详细信息:

https://chrisbroadfoot.id.au/2008/07/19/many-to-many-relationship-mapping-with-gorm-grails/ http://docs.grails.org/3.1.1/ref/Database%20Mapping/joinTable.html