hibernate - 外键(FK_ 必须与引用的主键具有相同的列数

标签 hibernate grails grails-orm

我正在使用一个遗留数据库,其中表 A 由 3 个组合键组成,表 B 由 2 个组合键组成,它们与表 A 中的两个组合键相同

OnesolPeNames

class OnesolPeNames implements Serializable {

    static mapping = {
        table "ONESOL_pe_names"

        id composite: ["division", "peid"]

        columns{
            division column: 'division', length: 8, sqlType: "char"
            peid column: 'pe_id', length: 12, sqlType: "char"
            peNameU column: 'pe_name_u', length: 50, sqlType: "char"
        }
    }

    static hasMany = [ recoverySetups : RecoverySetup]

    ....

恢复设置
class RecoverySetup implements Serializable {

    static mapping = {
        table "recovery_setup"

        id composite: ["division", "peid", "orgkey"]

        columns {
            division column: 'division', length: 10, sqlType: "char"
            peid column: 'peid', length: 12, sqlType: "char"
            orgkey column: 'org_key', length: 8, sqlType: "char"

            oneSolName column: ['division', 'peid']


        }
    }

    static belongsTo = [oneSolName: OnesolPeNames]

    ....

我正在尝试像这样访问 OnesolPeNames。

recoverySetup.onesolPeNames.peNameU。

我收到以下错误

Caused by MappingException: Foreign key (FK_ib9w9pn893cwi1dkk84qs31bx:recovery_setup [division, peid,onesol_pe_names_division,onesol_pe_names_peid])) must have same number of columns as the referenced primary key (ONESOL_pe_names [division,pe_id])



我将 oneSolName 列设置为 ['division', 'peid'] , onesol_pe_names_division,onesol_pe_names_peid 在哪里来自(哪里?

难道我的复合键是 PK 的一部分,但也扮演着被称为“派生身份”的 FK 的角色?

最佳答案

我有一个类似的问题,我以这种方式解决了映射表:

class RecoverySetup implements Serializable {

    static mapping = {
        table "recovery_setup"
        id composite: ["division", "peid", "orgkey"]
        columns {
            orgkey column: 'org_key', length: 8, sqlType: "char"

            oneSolName {
                column name: 'division'
                column name: 'peid'
            }
        }
        oneSolName updateable: false, insertable: false
    }

    static belongsTo = [oneSolName: OnesolPeNames]
    ...
}

关于hibernate - 外键(FK_ 必须与引用的主键具有相同的列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31167194/

相关文章:

java - 将多对多关系保存在相应的映射表中

java - 设计一个hibernate dao

java - 在 Hibernate 中使用 SEQUENCE 时导致违反唯一约束的原因是什么?

grails - 为什么Grails域验证会拒绝类似http://wctest.jenkins:8080/CRMGateway的网址

spring - Grails:仅POST或GET httprequest参数

java - Grails 项目 : Gorm or JPA/Hibernate annotations for legacy db mapping?

java - 对一个实体使用两个实体管理器

Grails数据绑定(bind)一对多关系

java - Grails 3.3.2 域类继承问题

grails - 使用 grails criteria api 定义 OR 条件