【发布时间】:2014-11-05 19:29:47
【问题描述】:
我的数据库中有两个表:Client 和 Address。 Client 引用 Address 两次:分别为 BillToAddress 和 ShipToAdress。我想使用 jOOQ 用他的地址检索Client。这是我的尝试:
public static Client fromRecord(Record record, Table<AddressRecord> billTo, Table<AddressRecord> shipTo) {
return new Client(record.getValue(CLIENT.CLIENT_ID),
AddressDao.fromRecord(record.into(billTo)),
AddressDao.fromRecord(record.into(shipTo))
);
}
public List<Client> loadAll() {
superfirma.jooq.local.tables.Address billTo = ADDRESS.as("billTo");
superfirma.jooq.local.tables.Address shipTo = ADDRESS.as("shipTo");
return jooqContext.select().from(CLIENT)
.join(billTo).on(CLIENT.BILL_TO_ADDRESS_ID.eq(billTo.ADDRESS_ID))
.leftOuterJoin(shipTo).on(CLIENT.SHIP_TO_ADDRESS_ID.eq(shipTo.ADDRESS_ID))
.fetch(record -> fromRecord(record, billTo, shipTo));
}
它不起作用:record.into 按列名匹配,不考虑(别名)表名。从我快速浏览 jOOQ 的代码来看,它就是这样工作的(我想知道为什么它不能按我想要的方式工作)。结果是一个具有两个相同地址的客户端。
这样做的替代方法是什么?
【问题讨论】:
标签: java sql alias java-8 jooq