java - 使用 Mapstruct 作为 JOOQ 的 RecordMapper

标签 java database mapping record jooq

我想实现我自己的 RecordMapper 并使用 Mapstruct 将记录映射到 POJO。我不太明白如何实现这一点。我遵循了文档的这一部分:https://www.jooq.org/doc/3.13/manual/sql-execution/fetching/pojos-with-recordmapper-provider/

我的映射器如下所示:

public class LanguageMapper<R extends Record, E> implements RecordMapper<R, Language> {

  @Override
  public Language map(R record) {
    LanguageRecord languageRecord = (LanguageRecord) record;

    // this is just an example, in the future this is the kind of mapping that would be performed automatically via mapstruct
    return new Language(
             languageRecord.getId(), 
             languageRecord.getNamespaceId(), 
             languageRecord.getLanguage(), 
             languageRecord.getCountryCode(), 
             languageRecord.getLanguageTag()
    );
  }
}

问题是,作为一个记录,我实际上并没有得到一个LanguageRecord,而是一个我的语言表的RecordImpl,因此不能将 record 转换为 LanguageRecord。知道我需要改变什么吗?

使用 RecordImpl 时有趣的是,如果我做这样的事情

record.get(LANGUAGE.LANGUAGE_TAG);

它已经获得了错误的信息(它正在获得 LANGUAGE.NAMESPACE_ID)。因此,当像这样获取它然后将其映射到 POJO 时,它也会是错误的。

(根据此问题创建此问题 POJO Mapping in JOOQ regardless of parameter order )

最佳答案

目前不支持泛型映射源和目标: https://github.com/mapstruct/mapstruct/issues/583

解决方法示例:

https://github.com/mapstruct/mapstruct/issues/631

定义映射器时需要使用具体类。

关于java - 使用 Mapstruct 作为 JOOQ 的 RecordMapper,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61057659/

相关文章:

java - 在 DispatcherServlet 中未找到名称为 'HorarioLivre' 的 URI [/HorarioLivre/login.html] 的 HTTP 请求的映射

entity-framework - System.Drawing.Image EntityType 'Image' 没有定义键。定义此 EntityType 的键

Java BouncyCaSTLe ECC key 和自签名证书

java-如何确定不同类型服务器中特定类型处理的最佳线程数

mysql - 我如何在 CodeIgniter 中查询这个

mysql - 如何在google checkout中与mysql集成?

Java/My Batis 不返回 boolean 值?

java - 如何正确处理box2d形状?

java - 使用数组时代码出错

c# - 在 ASP.net 中创建嵌入式图像按钮?