Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/grails/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Grails GORM-相似实体之间的模型关系_Grails_Orm_Gorm - Fatal编程技术网

Grails GORM-相似实体之间的模型关系

Grails GORM-相似实体之间的模型关系,grails,orm,gorm,Grails,Orm,Gorm,对于我的项目,我使用Grails,但这是一个一般的ORM问题 我不熟悉ORMs和ER图,并试图找出如何最好地描述/实现以下内容: 我有两个实体:用户、连接 一个连接由2个用户(和其他基本属性)组成。可以在多个连接中找到用户。您如何描述用户和连接之间的关系?我不知道你会怎么称呼它,2对多?你将如何在ER图中绘制它 在GORM中,这应该是一种双向关系吗 编辑 作为附加要求,假设用户在关系中具有特定角色。喜欢学生和老师。因此,连接将具有User类型的student和teacher属性。我认为可以将您想

对于我的项目,我使用Grails,但这是一个一般的ORM问题

我不熟悉ORMs和ER图,并试图找出如何最好地描述/实现以下内容:

我有两个实体:用户、连接

一个连接由2个用户(和其他基本属性)组成。可以在多个连接中找到用户。您如何描述用户和连接之间的关系?我不知道你会怎么称呼它,2对多?你将如何在ER图中绘制它

在GORM中,这应该是一种双向关系吗

编辑


作为附加要求,假设用户在关系中具有特定角色。喜欢学生和老师。因此,连接将具有User类型的student和teacher属性。

我认为可以将您想要的描述为a,对连接
用户
集合应用某种约束。至于单向/双向,我相信您可以根据您的用例来完成这两个任务,尽管单向可能更难映射/配置

我还没有测试过这个,但是双向的多对多应该是这样的

class Connection {
  ...
  Set users = [] //ensure users exists, constraints won't work on null 
  static belongsTo = [User] 
  static hasMany = [users: User]

  static constraints = {
    users maxSize: 2
  }
}

class User {
  ...
  static hasMany = [connections: Connection]
}
我脑子里没有一个单向的例子,但我相信您可能需要使用一个额外的映射类

同样,我还没有对此进行测试,但这里有一个使用mapping类的单向多对多的示例

class Connection {
  ...
  Set users = []
  static hasMany = [users: ConnectionUser]
  static constraints = {
    users maxSize: 2
  }
}

class User {
  ...
}

class ConnectionUser {
  User user
  Connection connection
  //or for cascading effects
  //static belongsTo = [connection: Connection]
  ...
  ... //lots of additional code to manage adding,
  ... //removing, updating Connection-to-User relationships
} 

连接知道用户,但用户不知道他们所属的连接。如果使用映射类路径,则需要手动管理与用户关系的连接。以类为例查看映射类。

问题不在于GORM,而在于实体。在编写域类之前,您必须清楚地映像您希望保留和操作的信息。根据您的问题和评论,您更喜欢使用任何RDB。因此,让我们尝试对简单的表进行映像(不关心任何ORM、Grails、bi\uni方向),并尝试填充这些表的模拟细节

用户

  • 昵称(字符串)
  • 其他用户字段
连接

  • 教师(用户)
  • 学生(用户)
  • 其他连接字段
现在我们知道了所有用户和所有连接。对于给定的连接,我们可以说谁是教师-连接。教师和学生-连接。学生

注意:任何连接只有两个用户

关注用户。任何用户都可以是学生和教师。例如,如果用户只能是学生或教师,则必须添加其他字段

用户

  • 昵称(字符串)
  • isTeacher(布尔值)
  • 其他用户字段
现在我们有了一个用户列表,知道谁是圣约翰还是泰克。 如何获取给定用户的所有连接? GORM提供:Connection.findAllByStudent(givenUser),Connection.findallbytecher(givenUser)


此表格是否完全显示您的信息

非常感谢您的回复。我想这是有道理的。在接受答案之前,我将看看是否有其他人有任何想法。如果两个用户在连接中有特定的角色,并且需要是两个不同的字段,该怎么办。喜欢学生和老师。但是一个学生仍然可以有很多老师。一个老师可以有很多学生。我想我可以让它成为一个有序的集合,而不是两个字段?但我想说的是连接。学生或连接。老师。或者仅仅使用hasMany地图就行了。只需使用[“学生”或[“教师”]进行索引,我认为您也可以让用户使用两个单独的字段,您只需配置一个,否则Grails将被混淆