我正在尝试在GORM / Grails应用中映射现有表格。大多数表都有复合主键(不是我的选择)。
我发现当我将一个关联映射到一个类(子级的父级)时,其中父类的复合键包含与具有复合键的类(祖父级)的关联,GORM不会打扰检查祖父组类和子组合在非复合键中的映射。
儿童
class Child implements Serializable {
Parent parent
String name
belongsTo= [parent: Parent]
static mapping= {
id(composite: ['parent', 'name'])
}
}
父
class Parent implements Serializable {
GrandParent grandParent
String name
Collection<Child> children
belongsTo= [grandParent: GrandParent]
hasMany= [children: Child]
static mapping= {
id(composite: ['grandParent', 'name'])
}
}
祖父母
class GrandParent implements Serializable {
String name
Integer luckyNumber
Collection<Parent> parents
hasMany= [parents: Parent]
static mapping= {
id(composite: ['name', 'luckyNumber'])
}
}
尝试收集外键时,DDL生成失败。
org.hibernate.MappingException:
Foreign key (FK_1:CHILD [parent_grandparent_id,parent_name]))
must have same number of columns as the referenced primary key
(PARENT [parent_grandparent_name,parent_grandparent_lucky_number,parent_name])
它创建的外键与父类的主键(它能够正确解密)不匹配。
答案 0 :(得分:0)
尝试:
儿童强>
class Child implements Serializable {
String name
static belongsTo= [parent: Parent]
static mapping= {
id(composite: ['parent', 'name'])
}
}
<强>父强>
class Parent implements Serializable {
String name
//static belongsTo= [parent: Parent] //why do you need this
static belongsTo= [GrandParent ] //did you mean this
static hasMany= [children: Child,grandParent: GrandParent ]
static mapping= {
id(composite: ['grandParent', 'name'])
}
}
<强>祖父母强>
class GrandParent implements Serializable {
String name
Integer luckyNumber
static hasMany= [parents: Parent]
static mapping= {
id(composite: ['name', 'luckyNumber'])
}
}
答案 1 :(得分:0)
我问过Grails Slack #gorm,这似乎在Gorm映射中遇到了一个空白。
我在Grails数据映射项目中raised an issue。我们会看到这一点。