使用 @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 代码生成器中丢弃的主要内容,如果未能解决你的问题,请参考以下文章
input(type="checkbox"|type="radio")+jquery使用
防止 ESC 从 Chrome 上的 <input type="search"> 清除文本(或添加按钮以清除文本而不使用 type="search"