У меня в БД есть две таблицы: Client
и Address
. Client
ссылается на Address
дважды: как BillToAddress
и ShipToAdress
. Я хотел бы получить Client
с его адресами, используя jOOQ. Это моя попытка:
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, он работает именно так (и мне интересно, почему он не работает так, как я хочу). В результате получается Клиент с двумя одинаковыми адресами.
Каков альтернативный способ сделать это?