gpt4 book ai didi

grails - Grails 域模型中的继承

转载 作者:行者123 更新时间:2023-12-01 01:02:58 26 4
gpt4 key购买 nike

我的 Grails 应用程序的域模型具有以下要求:

  • 一个用户属于零个或一个组织
  • 组织是慈善机构或公司
  • 慈善机构和公司有一些通用字段和一些(不可为空的)字段,这些字段对于每种组织类型都是唯一的

  • 我把常见的组织领域放到了一个摘要中 Organisation哪个类(class) CharityCompany两者都延伸。我无法将此层次结构存储在单个表中,因为存在特定于每个组织类型的不可为空的字段。域模型的相关部分如下所示:
    class User {
    String name

    static belongsTo = [organization: Organization]

    static constraints = {
    organization nullable: true
    }
    }

    abstract class Organization {
    String name

    static hasMany = [users: User]

    static mapping = {
    tablePerHierarchy false
    }
    }

    class Charity extends Organization {
    // charity-specific fields go here
    }

    class Company extends Organization {
    // company-specific fields go here
    }

    看这个模型生成的MySQL模式,组织-公司和组织-慈善的继承关系似乎完全被忽略了。虽然有一个带有名称列的组织表,但它与公司或慈善机构都没有主外键关系

    最佳答案

  • 对于 MySQL 和 H2,我看到的结果与 IanRoberts 相同。换句话说:没有生成连接表,但是预期的 organization_id FK在users table 。
  • 使用“每个子类的表”映射( tablePerHierarchy false ),您最终会在数据库中获得隐含的一对一关系。 Charity 的主键和 Company将具有与父项 Organization 的 PK 相同的值. GORM/Hibernate3 生成的模式似乎没有通过参照完整性约束来强制执行这一点。这是纯粹的 Hibernate 魔法。更详细一点 here
  • 关于grails - Grails 域模型中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21486063/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com