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

如果自动递增字段不是第一个,那么jOOQ是否支持复合主键

汲利
2023-03-14

我使用jOOQ(3.14.11)来管理定义的表(在H2中 <罢工> 或MYSQL )如下:

CREATE TABLE example_one (
    group_id VARCHAR(36) NOT NULL, 
    pawn_id INT UNSIGNED AUTO_INCREMENT NOT NULL, 

    some_unimportant_attribute INT UNSIGNED DEFAULT 0 NOT NULL, 
    another_uniportant_attribute VARCHAR(36), 

    CONSTRAINT pk_example_one PRIMARY KEY (group_id, pawn_id)
)

请注意,在此SQL中,主键按该顺序指定(group,pawn)ID,但它是pawn_id,第二个是auto-increment/identity列。

看来jOOQ不喜欢这样的安排。当我尝试使用Record对象插入新行时,它不会返回给我“Pawnid”值:

 ExampleOneRecord r = create.newRecord(EXAMPLE_ONE);
 r.setGroup("a group identity");
 r.store();

 assert r.getPawnId() != null;  // <---- FAILS test
            // Some JDBC drivers seem to illegally return null
            // from getGeneratedKeys() sometimes
            if (rs != null)
                while (rs.next())
                    list.add(rs.getObject(1));

rs.getObject(1)的调用似乎假设生成的列始终是主键的第一列。

有什么方法可以说服jOOQ吗?

共有1个答案

宗政欣可
2023-03-14

这是jOOQ 3.15.1 for H2:https://github.com/jOOQ/jOOQ/issues/12192中的一个bug

 类似资料:
  • 问题内容: 是否可以在MySQL中制作结合了alpha元素和数字的自动增量功能? 我有一个具有QAb99,QAb101,QAd9003等键的现有系统。最大数字部分的范围为1到9999,而字母以QA开头,范围从QAa到QAd等,最终将通过QAd9999到QAe1等。 。 在SQL或SQL外部(例如php脚本)管理生成新密钥是否更好? 谢谢。 问题答案: 我前一阵子问过。不幸的是,Mysql并没有这样

  • 问题内容: 根据我对以下问题的了解(很久以前曾问过这些问题),Redis没有对master-master复制的内置支持。 截至目前,官方网站似乎对主- 主复制没有太多要求。仍然是这种情况,即Redis仍然没有多主复制的选项。甚至第三方工具似乎也无法帮助Redis实现相同的目标。我遇到过Zabcluster和Zookeeper,但是我不确定这是否可以满足我对简单的主- 主设置的要求,而无需进行许多其

  • 问题内容: 我正在尝试运行查询以检查列是否自动增加。我可以检查类型,默认值,是否可以为空等,但是我不知道如何测试它是否自动递增。这是我测试其他内容的方式: 不幸的是,没有可比较的列。那么,如何测试列是否自动递增? 问题答案: 对于MySql,请检查以下列: 对于Sql Server,请使用和列:

  • 问题内容: 一个人如何使用Maven支持增量构建?那里有指南吗?(Google的最佳搜索结果令人失望) 问题答案: Maven默认情况下以增量方式生成,但是事实证明,编译器插件(即javac的核心)是如此之快,以至于每次构建新代码都不会成为代码库大小合理的瓶颈,而不是与构造大型程序集或运行大型测试进行比较套房。(与大多数语言一样,Java的编译速度比C ++快得多。)

  • 问题内容: 这可能在MySql中吗?我可以有一个以字母为前缀的自动递增主键,例如R1234,R1235,R1236 …等等吗? 问题答案: 您可以做的是将密钥存储为两列。一个char前缀和一个auto-incrementing int,它们都被分组为主键。

  • 问题内容: 您能否提供一个非常简单的SQL示例,说明如何创建一个“计数”或“订单”字段,该字段将自动递增,但在不同字段中进行每次更改后重新启动?在下表中,每次“进餐”(Meal)字段发生更改时,“订单”(Order)字段将从“ 1”重新开始。谢谢。 吃饭时间点餐 午餐10:30 午餐11:00引用2 午餐11:15 3 晚餐4:30 晚餐1晚餐4:45 晚餐2晚餐引用3 晚餐5:30引用4 问题答