#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;
}