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

JOOQ生成的pojo缺少GeneratedValue注释

羊舌承颜
2023-03-14

我正在使用jooq为我的H2 db表生成pojo

CREATE TABLE PUBLIC.ABC (
  ID          BIGINT AUTO_INCREMENT PRIMARY KEY,
  TRADE_DATE  DATE,
  STK_CODE    VARCHAR(63),
  REMARKS     TEXT,
  TIMESTAMP   TIMESTAMP NOT NULL
);

但是生成的代码(如下)

{

    ...
    @Id
    @Column(name = "ID", unique = true, nullable = false, precision = 19)
    public Long getId() {
        return this.id;
    }
    ...

}

缺少@GeneratedValue注释,这使得无法使用spring data rest repository插入新记录,因为传入的对象总是抱怨没有设置id字段。

我可以做什么配置/工作来让jooq正常工作?

下面是我用来在编译时生成pojo的相关pom文件部分:

<plugin>
    <groupId>org.jooq</groupId>
    <artifactId>jooq-codegen-maven</artifactId>
    <executions>
        <execution>
            <goals>
                <goal>generate</goal>
            </goals>
        </execution>
    </executions>
    <dependencies>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <version>${h2.version}</version>
        </dependency>
    </dependencies>
    <configuration>
        <!-- JDBC connection parameters -->
        <jdbc>
            <driver>org.h2.Driver</driver>
            <url>jdbc:h2:${user.home}/</url>
        </jdbc>
        <!-- Generator parameters -->
        <generator>
            <database>
                <name>org.jooq.util.h2.H2Database</name>
                <includes>.*</includes>
                <schemata>
                    <schema>
                        <inputSchema>PUBLIC</inputSchema>
                    </schema>
                </schemata>
            </database>
            <target>
                <packageName>org.abc</packageName>
                <directory>target/generated-sources/jooq</directory>
            </target>
            <generate>
                <pojos>true</pojos>
                <jpaAnnotations>true</jpaAnnotations>
            </generate>
        </generator>
    </configuration>
</plugin>

变通方法

在添加该功能之前,遇到相同问题的任何人都可以选择替换程序,插件代码如下:

    <plugin>
        <groupId>com.google.code.maven-replacer-plugin</groupId>
        <artifactId>replacer</artifactId>
        <version>1.5.3</version>
        <executions>
            <execution>
                <phase>prepare-package</phase>
                <goals>
                    <goal>replace</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <basedir>${project.basedir}/${jooq.gen.dir}</basedir>
            <filesToInclude>tables/pojos/*.java</filesToInclude>
            <replacements>
                <replacement>
                    <token>@Id</token>
                    <value>@Id @javax.persistence.GeneratedValue</value>
                </replacement>
            </replacements>
        </configuration>
    </plugin>

共有1个答案

晋承嗣
2023-03-14

从Jooq3.7开始,这是一个缺失的特性。见:https://github.com/jOOQ/jOOQ/issues/5009

您有几个解决方案:

  1. 使用搜索替换Maven插件修补生成的代码,将@Id替换为@Id@javax.persistence.GeneratedValue(javax.persistence.GenerationType。IDENTITY)(假设所有的主键都是AUTO_INCREMENT
  2. 修补jOOQ-codemen的JavaGenerator'sorg.jooq.util.JavaGenerator.printCronJPAAnnoming()方法并自己添加该代码。
 类似资料:
  • 我的项目需要我自己生成DAO和POJO。必须对其进行某些修改。我的SRS说我必须使用jOOQ。我第一次使用它;我知道jOOQ自己生成POJO和DAO,但我找不到禁用它的方法。 我在jOOQ的文档中找不到任何对我有帮助的东西。有人能告诉我如何从DAO和POJO代禁用jOOQ,但仍然提供记录吗。 Maven pom。xml文件如下: 而且构建使用了gradle。我也不知道这会对更改产生什么影响。

  • 试图用Joda DateTimes生成JooQ POJOs,我遇到了一些问题。POJO使用默认的java.sql从生成器中生成。时间戳值,而不是日期时间。 代码如下。 Create Table(此处时间戳字段的名称已更改)希望确保我没有命中构建系统中的某个缓存。此名称仍应与下面的正则表达式匹配。 转换类——基于文档。 Jooq配置XML。基于文档(感谢您捕获我的表达式/表达式错误Luke)! 创建

  • npm错误!此运行的完整日志可以在:npm err!C:\users\ttopo\appdata\roaming\npm-cache_logs\2020-11-20t07_58_40_339z-debug.log` 0信息如果它以ok结束就可以工作1详细cli[1详细cli'c:\program Files\nodejs\node.exe',1详细cli'c:\program Files\node

  • 我更改了数据库中的一些表,所以我想生成记录、键、类等。但是每次我这样做时,它总是跳过jooq代码生成。 [INFO]--jooq-codegen-maven:3.11.10:generate(默认cli)@http网关--[INFO]跳过jooq代码生成 为了运行Jooq代码生成,我应该执行哪个mvn cmd?现在我使用: 谢谢

  • 问题内容: 我使用XJC工具为XSD架构生成Java类。当我使用JAXB Marshaller将类编组为XML有效负载时,我在输出XML中缺少“ schemaLocation”参数,但在xsd文件中声明了此参数。如何在输出XML中强制执行“ schemaLocation”参数? 以下是用于代码生成的xsd模式文件的开头: 问候 问题答案: 试试这个:

  • 我需要将XML内容绑定到pojo的String属性,为此我创建了自定义DomHandler来提取所需的部分,如下所示 将映射到pojo 我使用XSD生成我的POJO,并且我有几个自定义注释要添加到生成的POJO中,因此我使用maven-jaxb2-plugin。 问题是,它会根据需要添加注释以及与@xmlanyement互斥的@xmlement,有没有办法避免使用XSD添加@xmlement注释?