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

时间:2015-12-08 07:05:59

标签: java sql h2 jooq

我试图让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为null,但如果我只是从jooq的生成器配置中删除<jpaAnnotations>true</jpaAnnotations>,则会生成相同的代码。当我查看生成的类时,似乎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 个答案:

答案 0 :(得分:1)

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

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

简而言之,如果您将JOOQ code-gen与hibernate JPA混合使用,请确保将hibernate.ddl-auto属性设置为none ,否则可能会删除数据库对象!