我正在尝试在 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])
它创建的外键与父类的主键不匹配(它能够正确破译)。