我试图了解如何正确配置 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();
但结果是一样的。beta 未映射。如果我通过指定字段或将构造函数也添加到 Source.class 的映射配置来替换默认映射,它不会改变。
谁能给我一个提示如何配置这样的映射?谢谢!
亲切的问候,何塞