Grails GORM-相似实体之间的模型关系
对于我的项目,我使用Grails,但这是一个一般的ORM问题 我不熟悉ORMs和ER图,并试图找出如何最好地描述/实现以下内容: 我有两个实体:用户、连接 一个连接由2个用户(和其他基本属性)组成。可以在多个连接中找到用户。您如何描述用户和连接之间的关系?我不知道你会怎么称呼它,2对多?你将如何在ER图中绘制它 在GORM中,这应该是一种双向关系吗 编辑Grails GORM-相似实体之间的模型关系,grails,orm,gorm,Grails,Orm,Gorm,对于我的项目,我使用Grails,但这是一个一般的ORM问题 我不熟悉ORMs和ER图,并试图找出如何最好地描述/实现以下内容: 我有两个实体:用户、连接 一个连接由2个用户(和其他基本属性)组成。可以在多个连接中找到用户。您如何描述用户和连接之间的关系?我不知道你会怎么称呼它,2对多?你将如何在ER图中绘制它 在GORM中,这应该是一种双向关系吗 编辑 作为附加要求,假设用户在关系中具有特定角色。喜欢学生和老师。因此,连接将具有User类型的student和teacher属性。我认为可以将您想
作为附加要求,假设用户在关系中具有特定角色。喜欢学生和老师。因此,连接将具有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(布尔值)
- 其他用户字段
此表格是否完全显示您的信息 非常感谢您的回复。我想这是有道理的。在接受答案之前,我将看看是否有其他人有任何想法。如果两个用户在连接中有特定的角色,并且需要是两个不同的字段,该怎么办。喜欢学生和老师。但是一个学生仍然可以有很多老师。一个老师可以有很多学生。我想我可以让它成为一个有序的集合,而不是两个字段?但我想说的是连接。学生或连接。老师。或者仅仅使用hasMany地图就行了。只需使用[“学生”或[“教师”]进行索引,我认为您也可以让用户使用两个单独的字段,您只需配置一个,否则Grails将被混淆