从 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 映射器的主要内容,如果未能解决你的问题,请参考以下文章