Java dozer中抽象类的映射

Java dozer中抽象类的映射,java,dozer,Java,Dozer,我有以下类结构(它实际上是一个具有Hibernate映射的VO层): 以及等效的DTO对象: public abstract class abstractClassDTO { private int id; private String name; } public class concreteClassADTO extends abstractClassDTO { private String aAttribute; } public class concreteC

我有以下类结构(它实际上是一个具有Hibernate映射的VO层):

以及等效的DTO对象:

public abstract class abstractClassDTO {
    private int id;
    private String name;
}

public class concreteClassADTO extends abstractClassDTO {
    private String aAttribute;
}

public class concreteClassBDTO extends abstractClassDTO {
    private Long bAttribute;
}
然后我有另一个像这样的物体:

public class compositeObject {
     private int anAttribute;
     private abstractClassVO myInstance;

}
及其等价物:

public class compositeObjectDTO{
    private int anAttribute;
    private abstractClassDTO myInstance;
}
如何让dozer自动将
myInstance
映射到与VO层中的具体类实现相对应的特定DTO


目前,Dozer甚至没有在
compositeObjectDTO
类的
myInstance
字段中添加任何内容。我的猜测是,这是因为
abstractClassDTO
它是一个抽象类,并且因为它不能确定实现,所以它什么也不做。我没有得到任何异常。

Dozer无法立即完成,但您可以编写一个助手,通过源类确定目标类。您可以从DozerBeanMapper.getMappingMetadata().getClassMappings*方法获取此信息。这些方法返回包含目标类的ClassMappingMetadata列表。您只需要检查目标类是否从abstractClassDTO继承。如果一个VO只有一个映射,则可以省略此检查


对于双向映射,您应该另外检查ClassMappingMetadata.MappingDirection字段。

Dozer无法立即执行此操作,但您可以编写一个助手,通过源类确定目标类。您可以从DozerBeanMapper.getMappingMetadata().getClassMappings*方法获取此信息。这些方法返回包含目标类的ClassMappingMetadata列表。您只需要检查目标类是否从abstractClassDTO继承。如果一个VO只有一个映射,则可以省略此检查

对于双向映射,还应检查ClassMappingMetadata.MappingDirection字段

public class compositeObjectDTO{
    private int anAttribute;
    private abstractClassDTO myInstance;
}