Как я могу использовать ‘InsertQuery’ с общими типами записей и таблиц

#java #jooq

#java #jooq

Вопрос:

У меня есть этот метод:

 public InsertQuery<Record> getInsertQuery(List<?> pojoList, TableImpl<Record> table) {
    InsertQuery<Record> insertQuery = ctx.insertQuery(table);
    pojoList.forEach(pojo -> insertQuery.addRecord(ctx.newRecord(table, pojo)));
    insertQuery.setReturning();
    return insertQuery;
}
 

В основном он принимает a pojoList , который должен быть вставлен в данное table , и возвращает an InsertQuery<Record> , который может быть выполнен для вставки одной или нескольких строк. Но когда я вызываю этот метод, например:

     try (DSLContext ctx = DslContextFactory.getDslContext();
             InsertQuery<AttachmentsRecord> insertQuery = new AttachmentQueries(ctx)
                     .getInsertQuery(pojos, JOOQ_GENERATED_TABLE)) {
                         // do something.

    }
 

Он жалуется на JOOQ_GENERATED_TABLE то, что требуемый тип есть TableImpl<Record> , но предоставляется что-то еще. Как я могу задать общий тип для таблиц и записей, созданных jooq? Действительно может понадобиться помощь.

Ответ №1:

Измените свою утилиту на это:

 public <R extends Record> InsertQuery<R> getInsertQuery(
    List<?> pojoList,
    Table<R> table // I recommend using Table<R> because TableImpl<R> is internal API
) {
    InsertQuery<R> insertQuery = ctx.insertQuery(table);
    pojoList.forEach(pojo -> insertQuery.addRecord(ctx.newRecord(table, pojo)));
    insertQuery.setReturning();
    return insertQuery;
}