Jooq: Таблицы с псевдонимами и Record.into

У меня в БД есть две таблицы: 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, он работает именно так (и мне интересно, почему он не работает так, как я хочу). В результате получается Клиент с двумя одинаковыми адресами.

Каков альтернативный способ сделать это?


person PL_kolek    schedule 11.09.2014    source источник


Ответы (1)


Это действительно ошибка в jOOQ. Для этого я зарегистрировал #3634.

Проблема возникает только с самостоятельными объединениями с псевдонимами в виде Record.into(Table) не может различить две таблицы, происходящие из одной и той же. В качестве обходного пути вы можете вручную разделить record на две части перед повторной загрузкой в ​​AddressDao.fromRecord().

person Lukas Eder    schedule 17.09.2014