Проблема, с которой вы столкнулись
Вы разыменовываете столбец из производной таблицы, используя Table.field(String)
:
clrs.field("bookID")
Тип, который вы используетевозвращение Field<?>
, с подстановочным знаком.Как и с любым универсальным типом, после того, как у вас есть шаблон, многие операции (но не все) больше не будут возможны для этого типа.Возьмите List<?>
, например.Вы все еще можете позвонить List<?>.get()
, чтобы получить Object
, но не List<?>.add(? element)
.В Field<?>
вы больше не можете вызывать eq()
, если только вы не приведете аргумент к необработанному типу.
Вы также можете привести тип <T>
вашего поля к типу, который вы уже знаете, например, используяTable.field(String, DataType<T>)
clrs.field("bookID", BOOK.ID.getDataType())
Изучите различные варианты, и вы можете найти те, которые могут оказаться наиболее полезными
Лучшее решение для вашего запроса
Вам на самом деле не нужно
- Назначить подзапрос локальной переменной
- Использовать производную таблицу для вашей проблемы
Частос jOOQ, если у вас возникли проблемы с производными таблицами, как указано выше, спросите себя, а не проще ли написать запрос?
Что вам действительно нужно, так это semi join .Пишите:
// Assuming this static import
import static org.jooq.impl.DSL.*;
ctx.select(AUTHOR.LASTNAME)
.from(AUTHOR)
.where(AUTHOR.ID.in(
select(BOOK_AUTHOR.AUTHORID)
.from(BOOK_AUTHOR)
.join(BOOK).on(BOOK.ID.eq(BOOK_AUTHOR.BOOKID))
.where(BOOK.TITLE.eq(clrsTitle))
)
.fetch();