gpt4 book ai didi

java - 如何在 MySQL 中使用 Jooq insert ... returned 而不生成代码?

转载 作者:行者123 更新时间:2023-12-02 08:50:55 25 4
gpt4 key购买 nike

我一直在尝试在 MySQL 中使用 insert...returning 和基于 DSL 的表定义(我没有使用代码生成),并且我返回的记录始终为空。根据阅读,我需要在表定义中指定标识列,但我不知道如何!

Record recordKey = create.insertInto(table("modulerecords"), 
field("id"),
field("module_id"),
field("created_date"),
field("created_by"),
field("state"),
field("tag_id"),
field("start_time",Timestamp.class),
field("kill_time", Timestamp.class),
field("feed_guid")
)
.values(null, moduleId, currentTimestamp(),
userId, state, tagId,
new Timestamp(startTime),
new Timestamp(killTime), feedGuid)
.returning(field("id"))
.fetchOne();

字段“id”是数据库中的auto_increment主键,但recordKey始终为空。

最佳答案

从 jOOQ 3.14 开始,可以通过将字段的数据类型指定为标识来实现这一点,这可以使用 SQLDataType.INTEGER.identity(true) 来完成。

例如,如果您有一个带有自动生成整数 ID 和字符串名称的表,您可以调用:

int id = DSL.using(connection, MYSQL_5_7)
.insertInto(
table("myTable"),
field("name", String.class))
.values("John Smith")
.returning(field("id", SQLDataType.INTEGER.identity(true)))
.fetchAny(field("id", Integer.class))

所以对于你的例子,你会这样做

Record recordKey = create.insertInto(table("modulerecords"), 
field("id"),
field("module_id"),
field("created_date"),
field("created_by"),
field("state"),
field("tag_id"),
field("start_time",Timestamp.class),
field("kill_time", Timestamp.class),
field("feed_guid")
)
.values(null, moduleId, currentTimestamp(),
userId, state, tagId,
new Timestamp(startTime),
new Timestamp(killTime), feedGuid)
.returning(field("id", SQLDataType.INTEGER.identity(true)))
.fetchOne();

参见this Github comment了解更多背景。

关于java - 如何在 MySQL 中使用 Jooq insert ... returned 而不生成代码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60778582/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com