簡體   English   中英

在推土機中映射抽象類

[英]Mapping abstract class in 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;
}

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

當前,Dozer開箱即用,甚至沒有在compositeObjectDTO類的myInstance字段中放入任何內容。 我的猜測是,由於abstractClassDTO它是一個表象類,並且由於它不能確定實現,所以它什么也不做。 我沒有任何例外。

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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM