2016-02-23 58 views
0

映射抽象類我有以下類結構(它實際上是一個VO層與Hibernate映射):在推土機

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; 
} 

如何讓推土機自動將myInstance映射到與VO層中具體類實現對應的特定DTO?

目前,開箱即用,Dozer甚至沒有在類的myInstance字段中放入任何東西。我的猜測是,這是由於abstractClassDTO它是一個抽象類,並且由於它無法確定實現,所以它什麼都不做。我沒有得到任何例外。

回答

0

推土機不能開箱即用,但您可以編寫一個幫助程序,通過源類來確定目標類。您可以從DozerBeanMapper.getMappingMetadata()。getClassMappings *方法獲取此信息。這些方法返回包含目標類的ClassMappingMetadata的列表。您只需要知道目標類是否從abstractClassDTO繼承。如果您只有一個VO的映射,則此檢查可以省略。

對於雙向映射,您還應該檢查ClassMappingMetadata.MappingDirection字段。