我正在尝试理解如何正确配置Orika类映射,以防我有继承类。
我已经设置了一个简单的例子来帮助您理解什么是工作的,什么是不工作的,但是我不明白。
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;
}
}我按如下方式进行映射
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);我已经尝试了以下配置...
factory.classMap(SourceExtended.class, Target.class)
.byDefault()
.register();
factory.classMap(Source.class, Target.class)
.byDefault()
.register();结果:两个映射都编译并运行,但SourceExtended对象的目标中没有设置beta,因此SourceExtended的映射不起作用。
所以我想,如果我显式地声明要使用的构造函数,那么beta也应该被映射:
factory.classMap(SourceExtended.class, Target.class)
.byDefault()
.constructorA("alpha", "beta")
.constructorB("alpha", "beta")
.register();
factory.classMap(Source.class, Target.class)
.byDefault()
.register();但是结果是一样的。未映射测试版。如果我通过指定字段或将构造函数添加到Source.class的映射配置来替换默认映射,它也不会改变。
有人能给我一个提示如何配置这样的映射吗?谢谢!
致以亲切的问候,何塞
发布于 2015-06-03 01:30:59
是的,您可以使用ClassMapBuilder.use,它将自动使用父类上的现有映射。
这里我已经有了从TicketEntity到Conversation的映射,我想把它映射到新的DetailedConversation (它有额外的字段),我是这样做的:
mapperFactory.classMap(TicketEntity.class, DetailedConversation.class)
.use(TicketEntity.class, Conversation.class)
.customize(conversationMapper())
.byDefault()
.register();https://stackoverflow.com/questions/24368419
复制相似问题