GORM 不处理在其复合主键中具有进一步关联的关联映射

GORM doesn't handle mapping of associations which have a further association in their composite primary key

我正在尝试映射 GORM/Grails 应用程序中的现有表格。大多数表都有 复合主键 (不是我的选择)。

我发现当我将关联映射到 class(child 的 parent)时,parent [=40 的复合键=] 包含与 class 和复合键的关联(grandparent),GORM 不会费心检查 grandparent class 和 subs 的映射在 non-composite 键中。

Child

class Child implements Serializable {
    Parent parent
    String name

    belongsTo= [parent: Parent]

    static mapping= {
        id(composite: ['parent', 'name'])
    }
}

Parent

class Parent implements Serializable {
    GrandParent grandParent
    String name
    Collection<Child> children

    belongsTo= [grandParent: GrandParent]
    hasMany= [children: Child]

    static mapping= {
        id(composite: ['grandParent', 'name'])
    }
}

盛大Parent

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])

它创建的外键与 parent class 的主键不匹配(它能够正确破译)。

尝试:

Child

class Child implements Serializable {

    String name

    static belongsTo= [parent: Parent]

    static mapping= {
        id(composite: ['parent', 'name'])
    }
}

Parent

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'])
    }
}

盛大Parent

class GrandParent implements Serializable {
    String name
    Integer luckyNumber

    static hasMany= [parents: Parent]

    static mapping= {
        id(composite: ['name', 'luckyNumber'])
    }
}

我在 Grails Slack #gorm 上四处询问,这似乎是 Gorm 映射中的一个空白。

我在 Grails 数据映射项目中 raised an issue。我们会看看这会发生什么。