简体   繁体   English

带注释的推土机深度映射

[英]Dozer Deep Mapping with Annotations

Unable to map deep mapping from Source class to Target class SourceEmployee.Address.houseName to TargetEmployee.houseName 无法将源类的深度映射映射到Target类SourceEmployee.Address.houseNameTargetEmployee.houseName

Source object class 源对象类

public class SourceEmployee 
{   
    private String empName;
    private Address addr;


    enter code here

    @Mapping("empName")
    public String getEmpName() {
        return empName;
    }
    public void setEmpName(String empName) {
        this.empName = empName;
    }   
    public Address getAddr() {
        return addr;
    }

    public void setAddr(Address addr) {
        this.addr = addr;
    }   
}

Address class 地址类

public class Address 
{
    private String houseName;
    public String getHouseName() {
        return houseName;
    }
    public void setHouseName(String houseName) {
        this.houseName = houseName;
    }
}

target object 目标对象

public class TargetEmployee 
{

    private String empName;
    private String houseName;

    public String getHouseName() {
        return houseName;
    }
    public void setHouseName(String houseName) {
        this.houseName = houseName;
    }
    public String getEmpName() {
        return empName;
    }
    public void setEmpName(String empName) {
        this.empName = empName;
    }
}

Main class copying from source to destination 主类从源复制到目标

public class CopyAttributes 
{

    public static void main(String args[])
    {
        SourceEmployee sourceEmp = new SourceEmployee();
        sourceEmp.setEmpName("Rafi");

        Address adr = new Address();        
        adr.setHouseName("Aashiyana");
        sourceEmp.setAddr(adr);

        Mapper mapper = new DozerBeanMapper();
        TargetEmployee destObject = mapper.map(sourceEmp, TargetEmployee.class);

        System.out.println(destObject.getEmpName());
        System.out.println(destObject.getHouseName());

    }
}

In case someone else run into the same problem, I manage to correct that case by doing this : 如果其他人遇到同样的问题,我设法通过这样做来纠正这种情况:

public class TargetEmployee 
{

    private String empName;
    private String houseName;

    @Mapping("addr.houseName")
    public String getHouseName() {
        return houseName;
    }
    public void setHouseName(String houseName) {
        this.houseName = houseName;
    }
    public String getEmpName() {
        return empName;
    }
    public void setEmpName(String empName) {
        this.empName = empName;
    }
}

The

@Mapping("empName")

set in SourceEmployee Isn't necessary 在SourceEmployee中设置没有必要

it's enough to add this annotation in the source class (SourceEmployee): 它足以在源类中添加此注释(SourceEmployee):

@Mapping("this")
private Address addr;

In fact, "this" means "remain on the same node"; 事实上,“这个”意味着“保持在同一个节点上”; after that, houseName will match between Address and TargetEmployee. 之后,houseName将匹配Address和TargetEmployee。

;) ;)

Alex 亚历克斯

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM