当前位置: 首页 > 面试题库 >

无法使用JPADatabase从H2生成Jooq类

令狐珂
2023-03-14
问题内容

我目前正在尝试从jpa实体生成jooq类,而不是使用现有的数据库

跟随此页面并使用jooq版本3.9.1,我当前的pom插件部分如下所示

<profile>
            <id>jooq-jpa</id>
            <build>
                <plugins>
                    <plugin>
                        <groupId>org.apache.maven.plugins</groupId>
                        <artifactId>maven-compiler-plugin</artifactId>
                        <configuration>
                            <source>1.8</source>
                            <target>1.8</target>
                        </configuration>
                    </plugin>
                    <plugin>
                        <groupId>org.jooq</groupId>
                        <artifactId>jooq-codegen-maven</artifactId>
                        <version>${jooq.version}</version>

                        <dependencies>
                            <dependency>
                                <groupId>org.jooq</groupId>
                                <artifactId>jooq-meta-extensions</artifactId>
                                <version>${jooq.version}</version>
                            </dependency>
                        </dependencies>

                        <executions>
                            <execution>
                                <goals>
                                    <goal>generate</goal>
                                </goals>
                            </execution>
                        </executions>

                        <configuration>
                            <logging>INFO</logging>

                            <generator>
                                <database>
                                    <name>org.jooq.util.jpa.JPADatabase</name>
                                    <includes>.*</includes>
                                    <excludes></excludes>
                                    <properties>
                                        <property>
                                            <key>packages</key>
                                            <value>my.entity</value>
                                        </property>
                                    </properties>
                                </database>
                                <target>
                                    <packageName>com.myentity.jooq</packageName>
                                    <directory>${project.build.directory}/generated-sources/jooq</directory>
                                </target>
                            </generator>
                        </configuration>
                    </plugin>
                </plugins>
            </build>
        </profile>

当运行maven软件包时,这确实会成功,但是不会生成预期的jooq类。构建的堆栈跟踪显示:

[INFO] ARRAYs fetched           : 0 (0 included, 0 excluded)
[INFO] Enums fetched            : 0 (0 included, 0 excluded)
[INFO] Packages fetched         : 0 (0 included, 0 excluded)
[INFO] Routines fetched         : 0 (0 included, 0 excluded)
[INFO] Tables fetched           : 0 (0 included, 0 excluded)
[INFO] UDTs fetched             : 0 (0 included, 0 excluded)
[INFO] Excluding empty catalog  : 
[INFO] Removing excess files

问题答案:

您的实体可能与放置插件的位置位于同一模块中。这意味着jOOQ代码生成器在编译模块之前被调用,这意味着当jOOQ代码生成器尝试查找带有JPA注释的实体时,尚未对其进行编译。

解决方案是创建以下模块依赖关系图:

                        +-------------------+
                        | Your JPA entities |
                        +-------------------+
                             ^         ^
                  depends on |         | depends on
                             |         |
          +---------------------+   +---------------------+
          | jOOQ codegen plugin |   | Your application    |
          +---------------------+   +---------------------+
                             |         |
                   generates |         | depends on
                             v         v
                     +-------------------------+
                     | jOOQ generated classes  |
                     +-------------------------+

为了解决这个问题,我已经注册了一个问题来改进文档:https :
//github.com/jOOQ/jOOQ/issues/6011



 类似资料:
  • 我试图为我的MySql数据库自动生成jOOQ java代码,但它不起作用。我在maven的JSP项目中使用jOOQ。 xml 我正在使用Tomcat在eclipse上运行这个项目。当我想运行Web应用程序时,我会清理项目,然后清理项目 当我运行该项目时,并没有生成数据库的java代码<正如文档中所说,由于我在jOOQ中使用maven,因此我可以自动生成JAVA代码,而无需使用cli。无需创建库。x

  • 有没有从纯Java代码生成jOOQ类的方法?如果不是,最接近的替代方案是什么?理想情况下,我希望在渐变版本中进行此操作。 我找到了这个答案,它链接到了这篇博文。这篇文章的实质是: 从JPA车型开始 将其转换为DDL脚本(.sql文件,其中包含语句) 创建一个新的HSQLDB文件,并通过在其上运行DDL脚本用表填充它。将生成的数据库保存到磁盘 从磁盘加载该数据库并在其上运行jOOQ代码生成 使用生成

  • 有时,当函数具有这样的签名时,它可能会变得毛茸茸的: 对于编译器来说,所有UUID都是相同的,因此希望在运行时被数据库捕获。 我喜欢jOOQ在编译时捕获许多问题的方式,我也想解决这个问题。我的目标是让每个表的每个键都有自己的类,并让这些字段正确生成pojos。 实现这一目标的最佳方法是什么?我想出了以下几点: 全面的JavaGenerator实现 具有大量强制类型映射的转换器,以及手动创建的键类

  • 我使用了Jooq官方网站上的这个工具:https://github.com/etiennestuder/gradle-jooq-plugin从我的数据库生成代码。 但如果我设置

  • 我有一个列类型为text[]的表。 我正在使用dsl和jooq以及H2。该表包含字符串值数组,如下所示: Table是使用jooq生成的java类。当我执行以下查询并打印结果时: 它把上面的表格数据打印出来。 但是当我执行时: 它给我一个例外: 它执行正常PostgreSQL,但给我错误在这个查询与H2。 我如何让它与H2一起工作?

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