首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何为类层次结构配置Orika?

如何为类层次结构配置Orika?
EN

Stack Overflow用户
提问于 2014-06-23 22:24:00
回答 2查看 6.5K关注 0票数 6

我正在尝试理解如何正确配置Orika类映射,以防我有继承类。

我已经设置了一个简单的例子来帮助您理解什么是工作的,什么是不工作的,但是我不明白。

代码语言:javascript
复制
public class Source {
    private final String alpha;

    public Source(final String alpha) {
        this.alpha = alpha;
    }

    public String getAlpha() {
        return alpha;
    }
}


public final class SourceExtended extends Source {
    private final String beta;

    public SourceExtended(final String alpha, final String beta) {
        super(alpha);
        this.beta = beta;
    }

    public String getBeta() {
        return beta;
    }
}


public final class Target {
    private final String alpha;
    private final String beta;

    public Target (final String alpha) {
        this(alpha, null);
    }

    public Target(final String alpha, final String beta) {
        this.alpha = alpha;
        this.beta = beta;
    }

    public String getAlpha() {
        return alpha;
    }

    public String getBeta() {
        return beta;
    }
}

我按如下方式进行映射

代码语言:javascript
复制
    Source s = new Source("alpha");
    Target t = this.mapper.map(s, Target.class);


    SourceExtended s = new SourceExtended("alpha", "beta");
    Target t = this.mapper.map(s, Target.class);

我已经尝试了以下配置...

代码语言:javascript
复制
factory.classMap(SourceExtended.class, Target.class)
    .byDefault()
    .register();

factory.classMap(Source.class, Target.class)
    .byDefault()
    .register();

结果:两个映射都编译并运行,但SourceExtended对象的目标中没有设置beta,因此SourceExtended的映射不起作用。

所以我想,如果我显式地声明要使用的构造函数,那么beta也应该被映射:

代码语言:javascript
复制
factory.classMap(SourceExtended.class, Target.class)
    .byDefault()
    .constructorA("alpha", "beta")
    .constructorB("alpha", "beta")
    .register();

factory.classMap(Source.class, Target.class)
    .byDefault()
    .register();

但是结果是一样的。未映射测试版。如果我通过指定字段或将构造函数添加到Source.class的映射配置来替换默认映射,它也不会改变。

有人能给我一个提示如何配置这样的映射吗?谢谢!

致以亲切的问候,何塞

EN

Stack Overflow用户

发布于 2015-06-03 01:30:59

是的,您可以使用ClassMapBuilder.use,它将自动使用父类上的现有映射。

这里我已经有了从TicketEntityConversation的映射,我想把它映射到新的DetailedConversation (它有额外的字段),我是这样做的:

代码语言:javascript
复制
    mapperFactory.classMap(TicketEntity.class, DetailedConversation.class)
            .use(TicketEntity.class, Conversation.class)
            .customize(conversationMapper())
            .byDefault()
            .register();
票数 8
EN
查看全部 2 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24368419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档