gpt4 book ai didi

java - 使用 Mapstruct 作为 JOOQ 的 RecordMapper

转载 作者:行者123 更新时间:2023-12-02 15:12:32 37 4
gpt4 key购买 nike

我想实现我自己的 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/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com