【发布时间】:2018-05-25 18:03:39
【问题描述】:
假设我有一个表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();
但感觉不对。如果有人可以为此问题提供任何其他解决方案/解决方法,我将不胜感激。
【问题讨论】:
-
JOOQ 没有提供一种方法来执行原生(普通)SQL jooq.org/doc/latest/manual/getting-started/use-cases/…
-
嗨,雷蒙德。是的,我知道这一点。我一直在寻找一种使用代码生成并确保类型安全的解决方案。我已经相应地更新了我的问题。