Отображение производных столбцов в POJO с помощью RecordMapper в JOOQ - PullRequest
1 голос
/ 27 февраля 2020

У меня есть таблица билетов, в которую я вставляю билет, и есть поле createBy, в котором хранится целое число UserId создателя этой записи. Во время выборки я соединяю с таблицей пользователей и именем и фамилией concat, и в моем DTO есть поле createBy с объединенным именем создателя. Как я могу отобразить производное поле? это моя ссылка https://www.jooq.org/doc/3.13/manual/sql-execution/fetching/pojos/, и я не могу найти такой сценарий при условии

проблема не в соединении. проблема заключается в отображении строки createBy, полученной после объединения, тогда как в классе записи, сгенерированном jooq, есть Integer, потому что в таблице базы данных я храню userId.

    List<MyTickets> mytickets = create.select(....FIELDS).from(TICKETS_).fetch().into(MyTickets.class);
    @Override
public Field<Integer> field9() {
    return Tickets.TICKETS_.CREATEDBY;
}

1 Ответ

0 голосов
/ 28 февраля 2020

В своем ответе я буду предполагать, что ваш вычисляемый столбец будет называться CREATED_BY_NAME, а не CREATED_BY, что уже является именем, и во избежание путаницы.

Если это Что-то, что вы делаете часто, у вас есть несколько вариантов, которые могут вас заинтересовать:

  • Используйте представления для создания этого альтернативного столбца CREATED_BY_NAME. Многие базы данных могут также вставляться в / обновлять представления, так что вам не придется платить большие штрафы за использование представлений для замены таблиц. Для вашего клиента logi c источник этого столбца будет прозрачным. Если вы хотите работать с UpdatableRecord, вам нужно будет сообщить генератору кода jOOQ, какой основной первичный ключ представления использует syntheti c флаг первичного ключа .
  • По аналогии с выше представлений, вы можете использовать вычисляемые столбцы в ваших таблицах, используя синтаксис GENERATED ALWAYS AS ... (или любой другой, который ваш диалект использует для синтаксиса). Не все диалекты поддерживают это, но это хорошая функция, которая превращает таблицы в представления без дополнительного объекта представления.
  • Если вы хотите продолжать вычислять этот столбец вручную в своем коде jOOQ, вы можете написать свой собственный DTO / POJO возражает или расширяет генератор кода с помощью пользовательского раздела кода , где вы генерируете соответствующий атрибут / getter / setter. Этот подход работает только для изменяемых POJO, так как вы не можете изменить конструктор неизменяемого POJO.
  • Вы также можете указать базовый класс для всех затронутых POJO и внедрить этот базовый класс, используя стратегию генератора ( programmati c или (). Базовый класс может затем реализовать все методы получения / установки для столбцов, такие как CREATED_BY_NAME.
  • . Вместо этого вы также можете использовать структурную типизацию. Вам не нужно отображать все столбцы в ваш POJO. Вы также можете отобразить некоторые столбцы в ваш сгенерированный POJO (исключая CREATED_BY_NAME) и отобразить столбец CREATED_BY_NAME отдельно. Просто сохраните ссылку на ваш jOOQ Result и / или Record и выполните несколько вызовов map / intoXYZ().
...