【问题标题】:Gorm Many to one mapping with composite key使用复合键的 Gorm 多对一映射
【发布时间】:2015-06-30 19:39:30
【问题描述】:

我正在尝试使用复合键映射多对一关系。

我希望能够像 recoverySetup.onesolPeNames.peNameU 那样从 RecoverySetup 访问 OnesolPeNames 域对象

我已将以下代码添加到我的 RecoverySetup 映射中。

        oneSolution {
                column name: 'division' 
                column name: 'peid'
            };

表 A

class RecoverySetup implements Serializable {

    static constraints = {

    }

    static mapping = {
        table "recovery_setup"

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

        columns{
            division column: 'division'
            peid column: 'peid'
            orgkey column: 'org_key'

            oneSolution {
                    column name: 'division' 
                    column name: 'peid'
                };
        }
    }

    String division
    String peid
    String orgkey
    OnesolPeNames oneSolution

}

表 B

class OnesolPeNames implements Serializable {

    static constraints = {

    }

    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]

    String division
    String peid
    String peNameU

}

我得到以下异常

由 MappingException 引起:实体映射中的重复列: org.hri.pisr.domain.RecoverySetup 列:除法(应映射 插入=“假”更新=“假”)

我还发现了这个 SO 帖子 One-to-Many With Composite Keys and Different Column Names in Grails

【问题讨论】:

  • 冒着问显而易见的风险,您是否尝试在映射中包含“插入:假,更新:假”?
  • 我试过这样 oneSolution { column name: 'division', insert: false, update: false column name: 'peid', insert: false, update: false } 有同样的错误
  • 在列定义中呢?
  • 我是gorm新手,请解释一下。
  • 没关系!这是一个愚蠢的建议。您需要有一个复合键吗?您可以使用static hasOne = [OnesolPeNames: 'oneSolution'] 建立双向关系

标签: hibernate grails grails-orm


【解决方案1】:

由 GUL Foreign key (FK_ must have same number of columns as the referenced primary key解决

RecoverySetup 类实现可序列化{

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

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-12-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-23
    • 1970-01-01
    • 2012-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多