我有四节课:

public class A { }
public class B extends A { }
public class C extends B { }
public class D extends B { }

从我在推土机文档中阅读的有关继承的内容来看,它一定很简单,我需要将超级类彼此映射,以及子类映射。
这是它在xml中的外观:
<mapping>
<class-a>foo.A</class-a>
<class-b>foo.bar.A</class-b>
</mapping>

<mapping>
<class-a>foo.B</class-a>
<class-b>foo.bar.B</class-b>
</mapping>

<mapping>
<class-a>foo.C</class-a>
<class-b>foo.bar.C</class-b>
</mapping>

<mapping>
<class-a>foo.D</class-a>
<class-b>foo.bar.D</class-b>
</mapping>

所有这些类都是相同的,我的意思是D和D具有相同的属性,C和C等。

问题:
在传递给推土机的对象中,我具有类型B的属性,可以通过C或D(多态性)来初始化该属性。
当推土机返回新的映射对象时,它将始终将B的属性类型返回给我,而不是C或D。
如何解决这个问题?

最佳答案

请看看Inheritance Mapping section。您可以将此类映射用于具有子类的字段类。

<mapping>
    <class-a>foo.Source</class-a>
    <class-b>foo.Dest</class-b>
    <field>
      <a>attr</a>
      <b>attr</b>
      <a-hint>foo.B, foo.C, foo.D</a-hint>
      <b-hint>foo.bar.B, foo.bar.C, foo.bar.D</b-hint>
   </field>
</mapping>

编辑:我实现了某种类型的自动多态feature request。我认为,它将包含在下一个Dozer版本中。

09-11 17:33