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

使用jooq在postgres中自动生成主键

雍志文
2023-03-14
CREATE TABLE public.book (
  id bigserial NOT NULL,
  author varchar(64)
  CONSTRAINT book_primary PRIMARY KEY (id)
)

要用jooq创建一张唱片,我说

Book b = new Book();
b.setAuthor("Eric");
BookDao bd = new BookDao(jooqConfiguration);
bd.insert(b);

这将引发一个id为null的约束冲突异常。如果我设置一个id(如

Book b = new Book();
b.setId(25);
b.setAuthor("Eric");
BookDao bd = new BookDao(jooqConfiguration);
bd.insert(b);

我没有得到异常,但postgres不会自动生成值。

http://www.postgresql.org/docs/current/static/datatype-numeric.html#datatype-serial的postgres文档指出“在INSERT中省略SERIAL列,或者指定DEFAULT关键字”

如何将jooq生成的dao配置为省略此列或使用默认值

编辑-我使用的是jooq版本3.3.2和postgres 8.4。(最终目标是aws红移。所以在postgres 8.4上进行原型化)。

共有1个答案

秦滨海
2023-03-14

生成的DAO不能正确处理默认值的问题已经出现在Jooq的github问题列表https://github.com/jooq/jooq/issues/2700中。

它在3.4.0中得到了修正。迁移到3.4.0解决了这个问题。

回答问题,以便其他人可以在需要时找到它。

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

  • 问题内容: 我的主键实体如下所示 当我跑步时,出现错误 无法获取或更新下一个值;嵌套的异常是org.hibernate.exception.SQLGrammerException:无法获取或更新下一个值 但是当我改变为 没有错误抛出。我想在 oracle db 上为每个表生成唯一的主键。 问题答案: 当将新创建的实体插入数据库时,告诉JPA提供者使用表从中获取ID。 当使用Hibernate作为提

  • 有时,当函数具有这样的签名时,它可能会变得毛茸茸的: 对于编译器来说,所有UUID都是相同的,因此希望在运行时被数据库捕获。 我喜欢jOOQ在编译时捕获许多问题的方式,我也想解决这个问题。我的目标是让每个表的每个键都有自己的类,并让这些字段正确生成pojos。 实现这一目标的最佳方法是什么?我想出了以下几点: 全面的JavaGenerator实现 具有大量强制类型映射的转换器,以及手动创建的键类

  • 我遇到了一个问题,我找不到任何关于Android空间和自动生成主键的文档。 我有一个实体类,看起来有点像这样: 当我手动设置id时,这是正常的,但是当我不设置主键时,我得到一个关于主键为空的错误。看着自动生成的文件,我看不到它会自动增加主键的任何地方。 所以我想我的问题是:你能用setter自动生成私有成员的主键吗,或者我需要在setter中手动自动生成我的键吗?

  • 当通过JOOQ code gen生成JOOQ类时,对于每个字段,都会有一个与之关联的SQLDataType,如下所示。 在每个生成的字段中使用SQLDataType有什么用途?因为我们已经有了一个返回类型,客户机代码可能会使用这个类型来进行编译检查。 为什么我们仍然需要知道生成的类/字段中的实际SQLDataType?

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