我是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]
}
当我尝试创建一个篮子(使用脚手架创建方法)我有所有用户的列表,我选择其中一个,但是当我保存时,它创建一个新的篮子,只有一个名称没有用户关联它
答案 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