从一对多 Grails 域查询返回格式错误的对象

Malformed object returned by query from a one-to-many Grails domain

考虑这两个 Grails domain 类:

class Agreement implements Serializable {
    String code
    String branchCode
    ...

    static belongsTo = [agency: CollectingAgency]

    static mapping = {
        ...
    }
}

class CollectingAgency implements Serializable {
    String type
    String agencyClass
    ...

    static hasMany = [agreement: Agreement]

    static mapping = {
        ...
    }
}

现在,当我执行 Agreement.findAll() 时,它会创建一个类似于此的 sql(使用 loggingSql = true):

select agreement0_.agency_id as agency4_67_1_, agreement0_.AGREH_CD as
    AGREH1_1_, agreement0_.AGREH_BRCHCD as AGREH2_1_,
    ...
    agreement0_.agency_id as agency4_66_0_,
                ^^^^^^^^^
    ...
from RVAGREHDROTB agreement0_
where agreement0_.agency_id=?

由于未知列(agency_id),语句将不会执行。我想知道它从哪里获得 agency_id 列?我还没有用这样的名称映射任何列。

当我尝试使用 CollectingAgency.findAll() 从另一端查询时,它 returns 格式错误 Object:

[
    {
        type: "0400300",
        agencyClass: "12",
        ...
        agreement: [

是的,就像那样,agreement 键有一个左方括号 [ 但没有右括号 ]。另外,不会检索 table 的其他属性。

如何使用类似于这些的结果对象实现查询:

Agreement.findAll():

[
    {
        code: "1212",
        branchCode: "a014s",
        ...
        agency: {
            type: "0400300",
            agencyClass: "12",
            ...
        },
        ...
    },
    {
        code: "1213",
        branchCode: "a014z",
        ...
        agency: {
            type: "0400300",
            agencyClass: "12",
            ...
        },
        ...
    },
    ...
]

CollectingAgency.findAll()

[
    {
        type: "0400300",
        agencyClass: "12",
        ...
        agreement: [
            {
                code: "1212",
                branchCode: "a014s",
                ...
            },
            {
                code: "1213",
                branchCode: "a014z",
                ...
            },
            ...
        ]
    },
    ...
]

在您的协议中class您有

static belongsTo = [agency: CollectingAgency]

这将在您的 class 中创建一个 'agency' 字段。您看到的 agency_id 只是将 'agency' 字段映射到数据库中的 'agency' 列。