【问题标题】:JOOQ record mapper maps the wrong id on joinJOOQ 记录映射器在加入时映射错误的 id
【发布时间】:2015-12-30 19:20:00
【问题描述】:

我有两个表,asdf 和 qwer,两个表都有一个名为“id”的主键。当我加入这两个表时,结果将有两个名为 id 的列,而 JOOQ 无法将记录正确映射到 POJO。

sql.select(ASDF.fields())
.select(QWER.fields())
.from(ASDF)
.leftOuterJoin(QWER).onKey(QWER.ASDF_ID)
.where(ASDF.SOMETHING.eq(something))
.fetch(r -> tuple(r.into(Asdf.class), r.into(Qwer.class)))

现在每个 Asdf 实例都具有与元组中对应的 Qwer 实例相同的 id。

是否有一个巧妙的别名技巧可以解决这个问题,或者我错过了 JOOQ 文档中的某些内容,或者这是 JOOQ 中的一个错误?

【问题讨论】:

    标签: java mysql sql jooq


    【解决方案1】:

    DefaultRecordMapper 按列名将Record 列映射到 POJO 属性。即使Record 中的两个ID 列可能具有与之关联的不同表引用(ASDF.IDQWER.ID),POJO 中也没有此类表信息可用。

    一种解决方法是首先将r 映射到相应的TableRecord,使用Record.into(Table)

    r -> tuple(
        r.into(ASDF).into(Asdf.class), 
        r.into(QWER).into(Qwer.class)
    )
    

    【讨论】:

    • Danke schön!您能否在答案中添加指向文档相关部分的链接?
    • @kazmer:已经链接了,见DefaultRecordMapper
    • tuple 来自哪里?
    • @JonasGröger:说得好。 OP 可能正在使用jOOλ 和 jOOQ。有一个静态导入将是org.jooq.lambda.Tuple.tuple,然后
    猜你喜欢
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2020-12-26
    • 2021-12-26
    • 2017-09-30
    • 2017-04-20
    • 1970-01-01
    • 2022-11-22
    相关资源
    最近更新 更多