【发布时间】:2014-02-24 12:02:09
【问题描述】:
我的 Grails 应用的域模型有以下要求:
- 一个用户属于零个或一个组织
- 组织是慈善机构或公司
- 慈善机构和公司有一些公共字段和一些(不可为空的)字段,它们对每个组织类型都是唯一的
我将公共组织字段放入一个抽象的Organisation 类中,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-company 和 organization-charity 之间的继承关系似乎被完全忽略了。尽管有一个带有名称列的组织表,但它与公司或慈善机构都没有主外键关系
【问题讨论】:
-
Re (1) - 我刚刚用一个只有这四个域类的空应用程序尝试了这个,我得到了一个一对多(用户表有一个
organization_id bigint是外键到组织表的id列)。你用的是什么数据库? -
@IanRoberts 我正在使用 MySQL
-
我建议用 MySQL 创建你想要的数据库。然后,使用 Grails Database Reverse Engineering Plugin 将其导入 Grails
-
@chelder 我不认为这对我有用,因为这个插件无法知道charity:organisation 和 company:organisation 之间的映射应该是 1:1 而不是 1: N
标签: grails grails-orm