jOOQ 不生成将 <daos> 标志设置为 true 的 DAO

Posted

技术标签:

【中文标题】jOOQ 不生成将 <daos> 标志设置为 true 的 DAO【英文标题】:jOOQ not generating DAOs with <daos> flag set to true 【发布时间】:2014-02-05 23:56:16 【问题描述】:

我已经刷新了我的项目,干净地重建了它,谷歌搜索/搜索了 *** 以寻找类似的问题,阅读了 jOOQ 文档,检查了潜在的 issues 的构建输出等。

我在我的 pom.xml 中添加了一个&lt;daos&gt; 标志来生成 jOOQ 数据库访问对象,因为 jOOQ 3.2.0 在线 manual says“DAO 生成可以使用 daos 标志激活”。根据 jOOQ Advanced Codegen documentation,将此标志设置为 true 不仅会生成 DAO,还会生成关系、记录和 POJO:

<generator>
    ...
    <generate>
        <daos>true</daos>
    </generate>   
</generator>

在将标志添加到我的 pom 之前,我有自动生成的记录和关系,但既没有 POJO 也没有 DAO。添加daos 标志并重建我的项目后,我还有 POJO 和其他两个,但我仍然没有任何 DAO。随附的屏幕截图显示了我生成的类。该标志添加的类在blue box 中。我认为应该有一个名为“daos”的包,其中包含 PurchaseDAO 和 UserDAO 类。

jOOQ DAO documentation 没有解释添加标志但未生成 DAO 的任何情况。该项目的部分目的是学习 jOOQ,因此使用 jOOQ 类手动编写 DAO 并不能解决我的问题。

编辑:来自工作和非工作解决方案的我的 SQLite 3.7.11 架构是 here。

【问题讨论】:

刚刚检查了 JOOQ 3.2 版,一切都很好,生成了 DAO,顺便说一句,生成的 DAO 是 org.jooq.impl.DAOImpl 的简单实现,大多数 DAO 方法都存在于该类中,在生成只是一些查找/获取其他方法。 否@SergiiZagriichuk,尽管有 daos 标志,但它们并未在我的项目中生成。如果 DAO 正在生成,我不会问这个问题。 也许您还需要&lt;pojos&gt;true&lt;/pojos&gt; @assylias no daos -> 启用 pojos @JaneGoodall 你是从控制台还是从 Eclipse 尝试过? 【参考方案1】:

我在您的控制台输出中发现 DAO 正在跳过,

INFO:生成 DAO 2014 年 1 月 16 日 12:40:45 PM org.jooq.tools.JooqLogger 信息信息:跳过 DAO 生成: 购买Dao.java Jan 16, 2014 12:40:45 PM org.jooq.tools.JooqLogger 信息信息:跳过 DAO 生成:UserDao.java 2014 年 1 月 16 日 12:40:45 PM org.jooq.tools.JooqLogger 信息 INFO:表 DAO 生成 :总计:212.968 毫秒,+1.759 毫秒

查过代码后发现下一个

// [#2573] Skip DAOs for tables that don't have 1-column-PKs (for now)
1287        if (keyColumn == null) 
1288            log.info("Skipping DAO generation", getStrategy().getFileName(table, Mode.DAO));
1289            return;
1290        

【讨论】:

哇,谢谢,这看起来像解决方案。我将重新生成表以使用非 row_id 主键。如果可行,我会对此表示赞成并将其标记为已接受。 如果其他人正在阅读本文,您可能需要刷新项目才能看到 DAO。只需在 Eclipse 中右键单击项目并选择 Refresh。 @JaneGoodall:非常有趣!您是否介意在您的问题中添加带有“row_id 主键”的表的 DDL,以便未来的访问者了解可能出了什么问题?我想这是 SQLite 特有的 我使用的 db 用户没有返回主键信息的权限。因此,我尝试使用具有提升权限的用户并创建了 DAO。数据库是 Postgres,可能用户缺少对 information_schema 或其他需要生成这些信息的表的权限。【参考方案2】:

我今天(2017 年)也面临同样的问题。

在您的配置文件中,与在线命令相同, 例如:

java -classpath jooq-3.10.2.jar:jooq-meta-3.10.2.jar:jooq-codegen-3.10.2.jar:mysql-connector-java-5.1.45-bin.jar:. org.jooq.util.GenerationTool 

configuration.xml中,在标签“generator”之间分别放置带有参数的标签“generate”。

例如:

<generator>
    ...
    <generate> 
        <pojos>false</pojos>
        <daos>true</daos>
         ...
    </generate>   
</generator> 

查看更多关于这些参数here。

【讨论】:

【参考方案3】:

配置includePrimaryKeys必须解决。

<includePrimaryKeys>true</includePrimaryKeys>

【讨论】:

以上是关于jOOQ 不生成将 <daos> 标志设置为 true 的 DAO的主要内容,如果未能解决你的问题,请参考以下文章

Jooq 生成视图类

如何在使用 jooq 生成的 dao 插入/更新后获取插入/更新的对象

有没有办法用 JOOQ 生成 DAO,findById 返回 Optional

JOOQ DAO 使用事务支持

在 jooq 中使用 DAO 时出现 DataAccessException

JOOQ:如何将外键解析为对象?