Java dozer中抽象类的映射
我有以下类结构(它实际上是一个具有Hibernate映射的VO层): 以及等效的DTO对象: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
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;
}