H2 AUTO_INCREMENT PK 的 JOOQ 代码生成器,带有 japAnnotations

Posted

技术标签:

【中文标题】H2 AUTO_INCREMENT PK 的 JOOQ 代码生成器,带有 japAnnotations【英文标题】:JOOQ code generator for H2 AUTO_INCREMENT PK with japAnnotations on 【发布时间】:2016-03-13 00:30:00 【问题描述】:

我正在尝试让 jooq 代码生成器使用以下选项

<generate>
    <pojos>true</pojos>
    <jpaAnnotations>true</jpaAnnotations>
</generate>

表:

CREATE TABLE PUBLIC.MSG_LOG (
  ID             BIGINT AUTO_INCREMENT PRIMARY KEY,
  IN_DATASOURCE  VARCHAR(63),
  OUT_DATASOURCE VARCHAR(63),
  MSG            VARCHAR(255),
  TIMESTAMP      TIMESTAMP NOT NULL
);

当我运行下面的代码时

MsgLogRecord msgLog = dslContext.newRecord(MsgLog.MSG_LOG);
msgLog.setInDatasource(inputSource);
msgLog.setOutDatasource(outputSource);
msgLog.setMsg(Joiner.on("").skipNulls().join(message));
msgLog.setTimestamp(Timestamp.valueOf(LocalDateTime.now()));
msgLog.store();

它会抛出一个错误,抱怨 ID 为空,但如果我只是从 jooq 的生成器配置中删除 &lt;jpaAnnotations&gt;true&lt;/jpaAnnotations&gt;,则相同的代码可以工作。当我查看生成的类时,似乎 MsgLogRecord 类缺少@Generated 注释,

/**
 * Getter for <code>PUBLIC.MSG_LOG.ID</code>.
 */
@Id
@Column(name = "ID", unique = true, nullable = false, precision = 19)
public Long getId() 
    return (Long) getValue(0);

任何人都可以提出解决办法吗?

【问题讨论】:

看起来您已经找到了解决问题的方法 - 不错!你知道你可以回答你自己关于堆栈溢出的问题吗?这样,以后遇到相同问题的访问者将很容易找到解决方案作为答案... 谢谢!我已经添加了一个答案,以防其他人遇到同样的问题 完美,感谢您记录这一点,约翰。这肯定对其他人有用 【参考方案1】:

原来这是我的 JPA 设置的问题,因为我使用的是 spring boot。

默认休眠的 spring.jpa.hibernate.ddl-auto 属性设置为 create-drop ,由于某种原因从 H2 删除 SEQUENCE 对象...我已将其设置为 none 并且代码现在正在运行。

简而言之,如果您将 JOOQ 代码生成与 hibernate JPA 混合使用,请确保将 hibernate.ddl-auto 属性设置为 none,否则它可能会丢弃您的数据库对象! p>

【讨论】:

以上是关于H2 AUTO_INCREMENT PK 的 JOOQ 代码生成器,带有 japAnnotations的主要内容,如果未能解决你的问题,请参考以下文章

H2(版本 2.0.202)auto_increment 不起作用

Hibernate 不填充 AUTO_INCREMENT 列作为复合 PK、错误或反功能的一部分?

H2 - CREATE TABLE 创建错误的数据类型

MySQL完整性约束

约束条件

MySql