【问题标题】:GORM doesnt create table in one-to-many relationship between two classesGORM不会在两个类之间的一对多关系中创建表
【发布时间】: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


【解决方案1】:

用户或篮子必须“拥有”关系,以便新对象级联到关系。

所以你必须添加到 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

【讨论】:

  • 这样做,当我从篮子的用户列表中删除创建篮子的用户时会发生什么?
  • 只要有其他用户关联,这应该没问题。如果您删除最后一个用户,您也必须删除购物篮 - 但据我了解,这是您无论如何都想做的。
  • 我已经用新信息编辑了我的问题,但我仍然做错了,即使我遵循了我在文档上阅读的内容。
猜你喜欢
  • 2018-03-06
  • 2020-05-13
  • 1970-01-01
  • 2023-03-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-10-23
相关资源
最近更新 更多