当前位置: 首页 > 知识库问答 >
问题:

JOOQ在executeInsert()之后,需要知道自动生成的ID

周楷
2023-03-14

使用JOOQ(与sqlite3一起)。

有一些代码如下所示:(根据文档中的示例修改:https://www.jooq.org/doc/latest/manual/sql-execution/fetching/pojos/)

// A "mutable" POJO class
public class MyBook {
  public int id;
  public String title;
}

// Create a new POJO instance
MyBook myBook = new MyBook();
// myBook.id = 10; <-- Id is NOT set here because the database auto-generates it
myBook.title = "Animal Farm";

// Load a jOOQ-generated BookRecord from your POJO
BookRecord book = create.newRecord(BOOK, myBook);

// Insert it (explicitly)
create.executeInsert(book);

// What is value of the auto-generated id?

此时,我需要知道从数据库自动生成的ID。

  • 有什么想法吗?
  • 还是在保存之前需要设置ID?

共有1个答案

韩阳飙
2023-03-14

使用executeInsert()似乎无法恢复ID:

// Insert it (explicitly)
create.executeInsert(book);

然而,使用<代码>记录。存储功能:

book.store()

以下是如何从POJO转到记录,以便可以存储PJO,然后使用生成的ID获取更新的POJO:

// A "mutable" POJO class
public class MyBook {
  public int id;
  public String title;
}

// Create a new POJO instance
MyBook myBook = new MyBook();
// myBook.id = 10; <-- Id is NOT set here because the database auto-generates it
myBook.title = "Animal Farm";

// Load a jOOQ-generated BookRecord from your POJO
BookRecord book = create.newRecord(BOOK, myBook);

// Insert it (implicitly) using the BookRecord instead of create.executeInsert()
book.store();            // <--- THIS IS THE KEY DIFFERENCE

// Get new Book POJO from the BookRecord
MyBook newBook = book.into(MyBook.class);

// This is also a handy function to get the Record as Map, 
//   which is easier to view in the debugger
Map<String, Object> bookMap = book.intoMap();
 类似资料:
  • 什么是自动化测?   做测试好几年了,真正学习和实践自动化测试一年,自我感觉这一个年中收获许多。一直想动笔写一篇文章分享自动化测试实践中的一些经验。终于决定花点时间来做这件事儿。   首先理清自动化测试的概念,广义上来讲,自动化包括一切通过工具(程序)的方式来代替或辅助手工测试的行为都可以看做自动化,包括性能测试工具(loadrunner、jmeter),或自己所写的一段程序,用于生成1到100个

  • 我试图为我的MySql数据库自动生成jOOQ java代码,但它不起作用。我在maven的JSP项目中使用jOOQ。 xml 我正在使用Tomcat在eclipse上运行这个项目。当我想运行Web应用程序时,我会清理项目,然后清理项目 当我运行该项目时,并没有生成数据库的java代码<正如文档中所说,由于我在jOOQ中使用maven,因此我可以自动生成JAVA代码,而无需使用cli。无需创建库。x

  • 问题内容: 我正在使用JPA(EclipseLink)和Spring。假设我有一个带有自动生成的ID的简单实体: 在我的DAO类中,我有一个调用此实体的insert方法。我希望该方法为新实体返回生成的ID,但是当我对其进行测试时,它将返回。 我还有一个包装DAO的服务类,如果有区别的话: 问题答案: 该ID仅保证在刷新时生成。持久实体只会使它“附加”到持久性上下文。因此,要么显式刷新实体管理器:

  • 要用jooq创建一张唱片,我说 这将引发一个id为null的约束冲突异常。如果我设置一个id(如 我没有得到异常,但postgres不会自动生成值。 http://www.postgresql.org/docs/current/static/datatype-numeric.html#datatype-serial的postgres文档指出“在INSERT中省略SERIAL列,或者指定DEFAUL

  • 我更改了数据库中的一些表,所以我想生成记录、键、类等。但是每次我这样做时,它总是跳过jooq代码生成。 [INFO]--jooq-codegen-maven:3.11.10:generate(默认cli)@http网关--[INFO]跳过jooq代码生成 为了运行Jooq代码生成,我应该执行哪个mvn cmd?现在我使用: 谢谢

  • 我在一个自动生成的代理后面。 我已经配置了设置。xml来使用这个代理,但它仍然不起作用。Android SDK可以很好地使用我设置的同一个代理。 我还能做些什么让maven工作? 错误: 如何获取我的NTLM身份验证凭据? 这是输出消息。在我的wpad中。dat(从我获取代理数据的地方),我没有指定的用户名和密码。。。