Глубокое отображение дозатора с аннотациями

100
8

Невозможно сопоставить глубокое сопоставление от исходного класса до целевого класса 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());

}
}

спросил(а) 2021-01-19T22:36:30+03:00 6 месяцев назад
1
Решение
79

Если кто-то другой сталкивается с одной и той же проблемой, мне удается исправить этот случай, выполнив следующее:


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


@Mapping("empName")

установить в SourceEmployee Не требуется

ответил(а) 2021-01-19T22:36:30+03:00 6 месяцев назад
63

достаточно добавить эту аннотацию в исходный класс (SourceEmployee):


@Mapping("this")
private Address addr;

Фактически, "this" означает "оставаться на одном и том же node"; после этого houseName будет совпадать между Address и TargetEmployee.

;)


Алекс

ответил(а) 2021-01-19T22:36:30+03:00 6 месяцев назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема