用于 H2 AUTO_INCREMENT PK 的 JOOQ 代码生成器,带有 japAnnotations
JOOQ code generator for H2 AUTO_INCREMENT PK with japAnnotations on
我正在尝试让 jooq 代码生成器使用以下选项
<generate>
<pojos>true</pojos>
<jpaAnnotations>true</jpaAnnotations>
</generate>
对于 table:
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 的生成器配置中删除 <jpaAnnotations>true</jpaAnnotations>
,则相同的代码有效。当我查看生成的 classes 时,MsgLogRecord class 似乎缺少 @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);
}
任何人都可以提出修复建议吗?
事实证明这是我的 JPA 设置的问题,因为我使用的是 spring 引导。
默认的休眠模式 spring.jpa.hibernate.ddl-auto 属性 设置为 create-drop 出于某种原因从 H2 中删除 SEQUENCE 对象...我已将其设置为 none 并且代码现在可以正常工作了。
简而言之,如果您将 JOOQ code-gen 与休眠 JPA 混合使用,请确保 hibernate.ddl-auto 属性 设置为 none,否则它可能会删除您的数据库对象!
我正在尝试让 jooq 代码生成器使用以下选项
<generate>
<pojos>true</pojos>
<jpaAnnotations>true</jpaAnnotations>
</generate>
对于 table:
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 的生成器配置中删除 <jpaAnnotations>true</jpaAnnotations>
,则相同的代码有效。当我查看生成的 classes 时,MsgLogRecord class 似乎缺少 @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);
}
任何人都可以提出修复建议吗?
事实证明这是我的 JPA 设置的问题,因为我使用的是 spring 引导。
默认的休眠模式 spring.jpa.hibernate.ddl-auto 属性 设置为 create-drop 出于某种原因从 H2 中删除 SEQUENCE 对象...我已将其设置为 none 并且代码现在可以正常工作了。
简而言之,如果您将 JOOQ code-gen 与休眠 JPA 混合使用,请确保 hibernate.ddl-auto 属性 设置为 none,否则它可能会删除您的数据库对象!