使用 jOOQ 创建具有主键的表

Posted

技术标签:

【中文标题】使用 jOOQ 创建具有主键的表【英文标题】:Create table with primary key using jOOQ 【发布时间】:2015-03-29 19:33:03 【问题描述】:

jOOQ 具有 CREATE TABLE 语法,如 in the documentation 所述:

create.createTable(AUTHOR)
      .column(AUTHOR.ID, SQLDataType.INTEGER)
      .column(AUTHOR.FIRST_NAME, SQLDataType.VARCHAR.length(50))
      .column(AUTHOR_LAST_NAME, SQLDataType.VARCHAR.length(50))
      .execute();

我想知道如何定义哪个列属于主键?那么在 jOOQ 中有没有办法使用 PRIMARY KEY 信息创建 CREATE TABLE 语句?

我对 SQLite 的解决方案特别感兴趣,它没有添加主键的语法,所以我认为在最坏的情况下我必须使用特定于数据库的解决方案?

【问题讨论】:

快速浏览一下手册,javadoc 似乎表明这不可用。 是的,看起来没有什么办法……我怀疑我必须自己创建 CREATE TABLE SQL 字符串。 【参考方案1】:

此功能已在 jOOQ 3.8 中实现:#4050。

create.createTable(AUTHOR)
      .column(AUTHOR.ID, SQLDataType.INTEGER)
      .column(AUTHOR.FIRST_NAME, SQLDataType.VARCHAR.length(50))
      .column(AUTHOR_LAST_NAME, SQLDataType.VARCHAR.length(50))
      .constraints(
           constraint("PK_AUTHOR").primaryKey(AUTHOR.ID)
      )
      .execute();

从jOOQ 3.6(#3338)开始,还可以在建表后使用ALTER TABLE语句添加约束:

create.alterTable(AUTHOR)
      .add(constraint("PK_AUTHOR").primaryKey(AUTHOR.ID))
      .execute();

【讨论】:

@JaysonMinard:确实。将于 2016 年第二季度初发布 根据this GitHub issue,此功能已针对 3.9 重新定位。伤心。 :( @SPoage:确实。由于数据库之间缺乏标准化,它是最棘手的 DDL 元素之一......没有足够的时间来确保我们在 3.8 版本中正确处理此问题

以上是关于使用 jOOQ 创建具有主键的表的主要内容,如果未能解决你的问题,请参考以下文章

SQLAlchemy Automap不为没有主键的表创建类

如何在SQL Server中获取具有复合主键的表列表?

快速 SQL 问题:在 H2 中创建具有主键的表的正确语法?

具有多个主键的资源的 REST API URI

如何将数据插入具有自动递增主键的 MySQL?

具有唯一索引和主键的列给出唯一约束违规