gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 14:49:53 25 4
gpt4 key购买 nike

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

我发现当我将一个关联映射到一个类( child 的 parent )时,父类的复合键也包含一个带有复合键的类(祖 parent )的关联,GORM不会费心检查非复合键中祖 parent 类和子对象的映射。

child

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

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

它创建的外键与父类的主键不匹配(它可以正确解密)。

最佳答案

尝试:

child

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

GrandParent
class GrandParent implements Serializable {
String name
Integer luckyNumber

static hasMany= [parents: Parent]

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

关于grails - GORM不处理在其组合主键中具有进一步关联的关联的映射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35563283/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com