JOOQ记录映射器在连接时映射错误的id

时间:2015-10-02 14:33:18

标签: java mysql sql jooq

我有两个表,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中的错误?

1 个答案:

答案 0 :(得分:4)

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

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

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