4

ソース クラスからターゲット クラスSourceEmployee.Address.houseNameへのディープ マッピングをマップできませんTargetEmployee.houseName

ソース オブジェクト クラス

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

住所クラス

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

対象物

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

ソースから宛先へのメインクラスのコピー

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());

    }
}
4

2 に答える 2

3

他の誰かが同じ問題に遭遇した場合、私はこれを行うことによってそのケースを修正することができます:

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")

SourceEmployeeに設定する必要はありません

于 2012-11-27T08:38:43.370 に答える
3

この注釈をソース クラス (SourceEmployee) に追加するだけで十分です。

@Mapping("this")
private Address addr;

実際、「これ」は「同じノードにとどまる」ことを意味します。その後、houseName は Address と TargetEmployee の間で一致します。

;)

アレックス

于 2013-06-26T17:05:08.343 に答える