我有两个表,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中的错误?
答案 0 :(得分:4)
DefaultRecordMapper
按列名称将Record
列映射到POJO属性。即使两个ID
列可能在Record
(ASDF.ID
与QWER.ID
)中具有与其关联的不同表引用,POJO中也没有此类表信息
一种解决方法是首先使用Record.into(Table)
将r
映射到相应的TableRecord
:
r -> tuple(
r.into(ASDF).into(Asdf.class),
r.into(QWER).into(Qwer.class)
)