从 POJO 到 Record 的 jOOQ 映射器

Posted

技术标签:

【中文标题】从 POJO 到 Record 的 jOOQ 映射器【英文标题】:jOOQ mapper from POJO to Record 【发布时间】:2017-04-20 07:44:41 【问题描述】:

使用 jOOQ 3.8.6,我必须实现 record mapper 才能从 Record 转换为 Pojo,因为获取的记录中有一些 UDT。 现在,我想知道在从 Pojo 创建记录时如何做相反的事情。

public void update(MyTable pojo) 
  MyTableRecord record = dsl.newRecord(tables.MyTable.MY_TABLE, pojo);
  record.store();

我有一个

org.jooq.exception.MappingException: An error ocurred when mapping record from class tables.pojos.MyTable

因为一个

Caused by: org.jooq.exception.DataTypeException: Cannot convert from MyType (class udt.pojos.MyType) to class udt.records.MyTypeRecord

我想我必须注册一个从 POJO 到 Record 的自定义转换器。 有人知道怎么做吗?

【问题讨论】:

【参考方案1】:

您正在寻找 RecordUnmapper feature (issue #2520),截至 jOOQ 3.8 尚未实现

您至少有以下两种可能的解决方法:

    不要使用RecordMapper,而是使用Converter 或数据类型Binding。这些将允许您以两种方式实现转换,它不仅适用于您的 POJO,还适用于您的记录 在调用 DSLContext.newRecord(Table, Object) 之前执行手动“取消映射”步骤

【讨论】:

【参考方案2】:

最终选择了 Google。从 jOOQ 3.13 开始,来自 OP 的语句运行良好。

【讨论】:

【参考方案3】:

您可以使用ModelMapper 将 POJO 转换为 Record。例如:

 ModelMapper modelMapper = new ModelMapper();
 WorkerRecord workerRecord = modelMapper.map(worker, WorkerRecord.class);

【讨论】:

以上是关于从 POJO 到 Record 的 jOOQ 映射器的主要内容,如果未能解决你的问题,请参考以下文章

使用 JOOQ 从 POJO 设置字段为空

Jooq 与 POJO 转换器

使用 POJO 仅更新 JOOQ 记录中更改的字段

jOOQ 自定义 Pojo 和 DAO 生成

将 jooq 中的获取/结果映射到特定记录

从 POJO 到 Avro Record 的通用转换