我是不熟悉Grails的人,我试图用它来创建某些东西,但是在域设计方面存在重大问题。
基本上,我想做一个这样的结构:
用户有很多购物篮
购物篮有很多用户,里面有很多盒子,可以有很多珠宝
一个盒子在篮子里,里面有很多珠宝
每个珠宝都有许多所有者。
用户可以创建篮子,可以在篮子中放置(创建)盒子,在盒子中可以放置(创建)珠宝,可以添加/删除其他用户(也成为所有者)
对于购物篮和珠宝,如果他将自己从购物篮所有权中删除,则其他用户仍然拥有购物篮,如果没有人拥有购物篮,则该用户消失。
用户可以删除一个盒子,并且珠宝盒内的珠宝在篮子的末端,用户可以在珠宝盒中编辑珠宝。
我来了那些域,但它们似乎不起作用,当我创建篮子时,它不会将自己添加到用户篮子列表中,也不会填充篮子用户列表。
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]
}
当我尝试创建购物篮(使用支架创建方法)时,我具有所有用户的列表,我选择其中一个,但是当我保存时,它将创建一个新的购物篮,其名称仅与用户无关。
最佳答案
用户或购物篮都必须“拥有”该关系,以便将新对象级联到该关系。
因此,您必须添加到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
关于grails - GORM不会在两个类之间的一对多关系中创建表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45209951/