grails - Grails:简单的hasMany关系创建了不必要的表

标签 grails gorm

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

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/

相关文章:

spring - Quartz 作业中的 Grails 事务

grails - 如何在 Spring-Security-Acl 中创建 ACL

angularjs - 运行应用程序中的 Grails 3.0 静态 html

grails - 不需要的GORM表创建

validation - Grails:域层次结构中的字段唯一性

grails - Grails: token 中的Oauth Twitter用户ID

grails - 我可以列出所有可用的数据源吗?

grails - 无法在grails中使用progresql

grails - 如何计算gorm中一对多关系中出现的次数-Grails

grails - GORM如何确保相关对象属性的唯一性