嗨,我有一个简单的问题。
我的域类是这样的:
class Example {
long seq
hasMany = [example_array: ExampleData]
long count
}
class ExampleData {
String type
long description
static belongsTo = Example
static constraints = {
}
}
这将产生3个表,就像多对多关系。
为什么是这样?
谢谢
最佳答案
使用额外表的原因是,您仅在一个方向上对关系进行了建模-Example
可以通过由于ExampleData
属性而添加到您的类字节码中的example_array
Set来访问其hasMany
实例,但是ExampleData
实例无法引用其拥有的Example
。
您添加了belongsTo
属性,但仅指定了类名。这足以配置所有权,级联删除等,但不提供类中的属性来访问Example
实例。
如果将其更改为其他受支持的语法,它将按预期工作:
static belongsTo = [example: Example]
此处
example
最终将是Example
属性的名称(您可以将其和/或example_array
更改为任何有效的属性名称),这与声明基本相同Example example
现在双方都可以访问对方,这种关系是双向的,您不再需要第三个表。这是因为通常在子表中使用外键来实现1-many,在这种情况下,该表中的
ExampleData
表指向Example
表。没有类中的属性来连接该列是不可能的,因此联接表是必需的。
关于grails - Grails:简单的hasMany关系创建了不必要的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39617797/