![](/img/trans.png)
[英]InstantiationException when Mapping a Class with Abstract Type Member in Dozer
[英]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.