Grails:Simple hasMany关系创建的表格多于必要的表格

时间:2016-09-21 13:21:12

标签: grails gorm

嗨,我有一个简单的问题。 我的域类是这样的:

class Example {

    long seq

    hasMany = [example_array: ExampleData]

    long count
}

class ExampleData {

    String type

    long description

    static belongsTo = Example

    static constraints = {
    }
}

这导致3个表,就像多对多关系一样。 这是为什么?

由于

4 个答案:

答案 0 :(得分:1)

额外表格的原因是您只在一个方向上建立了关系模式 - Example可以通过添加到您班级的ExampleData集合访问其example_array个实例字节码由于hasMany属性,但ExampleData实例无法引用其拥有的Example

您添加了belongsTo属性,但只指定了类名。这足以配置所有权,级联删除等,但不提供类中的属性来访问Example实例。

如果您将其更改为其他支持的语法,它将按预期工作:

static belongsTo = [example: Example]

此处example最终将成为Example属性的名称(您可以将其更改为和/或example_array为任何有效的属性名称),这基本上与声明

Example example

现在双方都可以访问另一方,这种关系是双向的,你不再需要第三个表。这是因为通常使用子表中的外键来实现1-many,在这种情况下,ExampleData的表指向Example的表。如果没有类中的属性连接到该列,那是不可能的,因此连接表是必要的。

答案 1 :(得分:0)

我相信你必须映射BelongsTo,就像这样:

static belongsTo = [example:Example]

希望有所帮助:)

答案 2 :(得分:0)

从hasMany Grails的定义来看,默认情况下会将这种关系映射到连接表。这个连接表是你提到的第3个表。不用担心。

答案 3 :(得分:0)

通过使附加表(即one-to-many relationship)包含两列,每个Example_ExampleData字段来自构成关系的实体的表(即idExample来构建ExampleDataExample)。

新添加的表是子表到父表 - ExampleDataGrails

因此,在您运行应用程序的情况下,默认情况下,one-to-many relationship会创建第3个表,因为您的表关系属于{{1}}。