Допустим, у меня есть таблица Person(id, fname, lname)
, и она содержит запись (1, 'Michael', 'Bay')
.Теперь я хочу создать еще одну запись в таблице Person
с тем же именем и именем, но с другим идентификатором, т.е. (453456, 'Michael', 'Bay')
.Это то, что я сделал бы в простом SQL
INSERT INTO Person(id, fname, lname)
SELECT 453456, Person.fname, Person.lname
FROM Person
WHERE Person.id = 1;
Как это можно сделать с JOOQ (в идеале, сохраняя при этом функции генерации кода и безопасности типов JOOQ)?
Я знаю, что JOOQпредоставляет возможность копировать целые записи из одной таблицы в ту же или другую таблицу с ее синтаксисом selectFrom
jooq.insertInto(PERSON)
.select(selectFrom(PERSON).where(PERSON.ID.eq(1)))
.execute();
Но в моем случае в записи есть только определенные столбцы, которые мне нужно скопировать, в то время как остальныеиз значений, которые нужно было установить явно
Другое решение, о котором я мог подумать, следующее:
jooq.insertInto(PERSON)
.values(452452)
.execute();
jooq.update(PERSON)
.set(row(PERSON.FNAME, PERSON.LNAME),
select(PERSON.FNAME, PERSON.LNAME)
.from(PERSON)
.where(PERSON.ID.eq(1)))
.where(PERSON.ID.eq(452452))
.execute();
Но это не так.Я был бы признателен, если бы кто-то мог предоставить какое-либо другое решение / обходной путь для этой проблемы.