在推土机中映射抽象类

时间:2016-02-23 13:06:06

标签: java dozer

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

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

public class concreteClassAVO extends abstractClassVO {
    private String aAttribute;
}

public class concreteClassBVO extends abstractClassVO {
    private Long bAttribute;
}

等效的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甚至没有在myInstance类的compositeObjectDTO字段中放置任何内容。我的猜测是,这是因为abstractClassDTO它是一个抽象类,并且因为它无法确定实现,所以它什么都不做。我没有任何例外。

1 个答案:

答案 0 :(得分:0)

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

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