【发布时间】:2017-07-20 08:55:49
【问题描述】:
我是 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]
}
当我尝试创建一个篮子(使用脚手架创建方法)时,我有所有用户的列表,我选择其中一个,但是当我保存时,它会创建一个新的篮子,其中只有一个名称,没有与之关联的用户.
【问题讨论】:
-
我强烈建议您观看此youtube.com/watch?v=VUMQGrNi2F0,基本上您可以解决所有问题,并通过域类中的集合或列表使其变得非常简单,以便从其他类中获取您需要的内容。但是我想知道您是否通过使用域类来存储临时购物车对象而犯了一个完整的错误-您可以使用您的验证 bean 来收集所有这些,当一切顺利时您可以处理并存储它-它将如果每次用户从购物车中添加或删除某些东西时它都会收集,那么它就是一个巨大的数据库
-
我不需要域类来存储临时文件。我需要所有这些对象都是持久的和可寻址的(例如,给定用户的所有篮子的列表,他可以“打开”并在里面看到给定篮子的所有盒子)。我会看看你的视频,我很确定我可以从中学到很多东西,谢谢!
标签: grails grails-orm