假设我有一张表Person(id, fname, lname)
,它包含一条记录(1, 'Michael', 'Bay')
。现在我希望在Person
表中创建另一条记录,其中包含相同的fname和lname但不同的id,即(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();
但感觉不对。如果有人能为此问题提供任何其他解决方案/解决方法,我将不胜感激。
答案 0 :(得分:1)
jooq.insertInto(PERSON)
.columns(PERSON.ID, PERSON.FNAME, PERSON.LNAME)
.select(select(val(452452), PERSON.FNAME, PERSON.LNAME)
.from(PERSON)
.where(PERSON.ID.eq(1)))
.execute();
与往常一样,这是假设以下静态导入:
import static org.jooq.impl.DSL.*;