jOOQ 无法映射 PostgreSQL 列以使 JPA 满意

Posted

技术标签:

【中文标题】jOOQ 无法映射 PostgreSQL 列以使 JPA 满意【英文标题】:jOOQ cannot map PostgreSQL columns to make JPA happy 【发布时间】:2016-05-10 15:17:38 【问题描述】:

在 Spring Boot 应用程序 (v. 1.3.2) 中,我尝试使用 jOOQ 生成所有映射数据库表的 POJO,以便它们也被注释以与 JPA 一起使用。数据库是 PostgreSQL。

问题在于 jOOQ 将某些类型(例如 jsonb)映射为 Object。似乎Hibernate不喜欢这个。我得到一个例外:

Caused by: org.hibernate.MappingException: property mapping has wrong number of columns: model.tables.pojos.Product type: object

有趣的是,如果我在生成的文件中将Object 替换为String,那么一切正常。显然这不是一个解决方案,否则我不明白为什么我应该使用工具来自动生成我的注释实体。

知道如何解决这个问题吗? jOOQ 是否可能无法以更严肃的方式映射这些值(例如,jsonjsonbean13 等)。我猜,即使是String 也会更好。

【问题讨论】:

【参考方案1】:

使用 jOOQ 支持特定于供应商的数据类型

使用 jOOQ 添加对绑定供应商特定数据类型的支持的标准方法是提供转换器或数据类型绑定:

http://www.jooq.org/doc/latest/manual/code-generation/custom-data-types http://www.jooq.org/doc/latest/manual/code-generation/custom-data-type-bindings

数据类型绑定页面甚至包含如何使用 PostgreSQL 的 JSON 数据类型执行此操作的示例。

使用 jOOQ 和 JPA

jOOQ 没有完全实现 JPA。如果您想将 JPA 注释的 POJO 用作真正的实体,您最好通过 Hibernate 生成它们(与 jOOQ 不同,它还注释 @OneToMany 和其他有用的属性)。

【讨论】:

【参考方案2】:

我必须为 jOOQ 指定一个转换器:

http://www.jooq.org/doc/3.7/manual/code-generation/custom-data-type-bindings/

【讨论】:

以上是关于jOOQ 无法映射 PostgreSQL 列以使 JPA 满意的主要内容,如果未能解决你的问题,请参考以下文章

jOOQ 无法在 PostgreSQL 模式下为 H2 数据库正确翻译 SQL

如何在 jOOQ 中转换“to_json()”PostgreSQL 函数?

jooq, simpleflatmapper, kotlin 映射

使用 jOOQ 在 PostgreSQL 中进行 UPSERT

PostgreSQL 函数 + 在 jOOQ 中强制转换

索引postgresql数组列以进行大于/小于比较?