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

kaz*_*mer 4 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)))
Run Code Online (Sandbox Code Playgroud)

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

是否存在可以解决此问题的聪明的别名技巧,还是我错过了JOOQ文档中的某些内容,还是这是JOOQ中的错误?

Luk*_*der 5

DefaultRecordMapperRecord通过列名将列映射到POJO属性。即使这两ID列在Record(ASDF.IDvs. QWER.ID)中可能具有与之相关的不同表引用,POJO中也没有可用的此类表信息。

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

r -> tuple(
    r.into(ASDF).into(Asdf.class), 
    r.into(QWER).into(Qwer.class)
)
Run Code Online (Sandbox Code Playgroud)