我的 Grails 应用程序的域模型具有以下要求:
我把常见的组织领域放到了一个摘要中
Organisation
哪个类(class)Charity
和 Company
两者都延伸。我无法将此层次结构存储在单个表中,因为存在特定于每个组织类型的不可为空的字段。域模型的相关部分如下所示: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模式,组织-公司和组织-慈善的继承关系似乎完全被忽略了。虽然有一个带有名称列的组织表,但它与公司或慈善机构都没有主外键关系
最佳答案
organization_id
FK在users
table 。 tablePerHierarchy false
),您最终会在数据库中获得隐含的一对一关系。 Charity
的主键和 Company
将具有与父项 Organization
的 PK 相同的值. GORM/Hibernate3 生成的模式似乎没有通过参照完整性约束来强制执行这一点。这是纯粹的 Hibernate 魔法。更详细一点 here 关于grails - Grails 域模型中的继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21486063/