使用 @Type(type = "jsonb") 注释的实体会从 jooq 代码生成器中丢弃

Posted

技术标签:

【中文标题】使用 @Type(type = "jsonb") 注释的实体会从 jooq 代码生成器中丢弃【英文标题】:Entities annotated with @Type(type = "jsonb") are discarded from jooq code generator 【发布时间】:2021-01-23 11:22:35 【问题描述】:

如果我用 @Type(type = "jsonb") 注释一个实体来自

     <dependency>
        <groupId>com.vladmihalcea</groupId>
        <artifactId>hibernate-types-52</artifactId>
     </dependency>
   

实体从 jOOQ 代码生成过程中排除(无表、记录...)。

是否有不涉及排除注释的解决方案? (https://www.jooq.org/doc/latest/manual/code-generation/custom-data-type-bindings/??!)

谢谢

【问题讨论】:

实体被排除在外的事实可能是一个错误。介意在这里举报吗? github.com/jOOQ/jOOQ/issues/new/choose。理想情况下,需要一些帮助来重现它。 谢谢@LukasEder。我按照你的建议开了票github.com/jOOQ/jOOQ/issues/10723。 【参考方案1】:

正如相关的github issue #10723 中所述,这似乎是JPADatabase 当前工作方式的限制(在jOOQ 3.13、3.14 中)。它使用 Hibernate 在内存中的 H2 数据库中创建您的模式,然后再进行逆向工程。

H2 不支持 JSONB 数据类型,但支持 JSON 类型。这意味着您的com.vladmihalcea.hibernate.type.json.JsonBinaryType 不能与这种功能组合一起使用。您有几个选择:

不要使用JPADatabase,由于上述原因,这始终是限制的来源。如果您计划使用供应商特定的功能,则使用实际的 PostgreSQL 连接来生成 jOOQ 代码会更好。您甚至可以按照feature request #6551 或shown in this example 中的要求在testcontainers 托管数据库上运行代码生成。 改用JSON 类型,这似乎可行。当然,这很遗憾,因为 PostgreSQL 使用 JSONB 提供比使用 JSON 更好的性能,但在您的情况下它可能是一个可行的解决方法。

【讨论】:

以上是关于使用 @Type(type = "jsonb") 注释的实体会从 jooq 代码生成器中丢弃的主要内容,如果未能解决你的问题,请参考以下文章

将标头添加到 ResponseWriter

input(type="checkbox"|type="radio")+jquery使用

使用ajax总是走到error里,不知错在哪 请大神指点

防止 ESC 从 Chrome 上的 <input type="search"> 清除文本(或添加按钮以清除文本而不使用 type="search"

使用 JQuery 时的 ":last-of-type" 或 ".last()"

将 input type="text" 更改为 input type="password" onfocus()