2017-02-14 2 views
1

У меня есть две модели и картографа,MapStruct избежать создания возврата объекта

public class Form { 
    private int x1; 
    private int x2; 
    private int x3; 
    private int x4; 
    // Constructor and getters setters ommited. 
} 

public class Domain { 
    private int x1; 
    private int x2; 
    private int x3; 
    private int x4; 
    // Constructor and getters setters ommited. 
} 

@Mapper 
public interface DomainMapper { 

    @Mappings({ 
     @Mapping(target = "x1", ignore = true), 
     @Mapping(target = "x2", ignore = true)}) 
    Domain toDomain(Form form); 
} 

Это мой пример,

// I create a form object. 
Form form = new Form(); 
form.setX1(1); 
form.setX2(2); 
form.setX3(3); 
form.setX4(4); 

// I create a Domain object. 
Domain domain = new Domain(); 
domain.setX1(100); 
domain.setX2(200); 

// Map the form to domain. 
domain = domainMapper.toDomain(form); 
System.out.print(domain.getX1()); // => shows "0" instead of "100" 

MapStruct генерирует исходный код, который внутри создает новый объект домена.
Запуск последней команды domain = DomainMapper.toDomain(form); мой предыдущий объект домена будет потерян. Есть ли способ передать свойства объекта Form объекту Domain, который я уже создал, используя MapStruct?
я пытался что-то вроде этого, но он не работает,

@Mapper 
public interface DomainMapper { 

    @Mappings({ 
     @Mapping(target = "x1", ignore = true), 
     @Mapping(target = "x2", ignore = true)}) 
    Domain toDomain(Form form, Domain referenceToExistingObject); 
} 

Я использовал его, как это, но он не работает,

domainMapper.toDomain(form, domain); 
+0

недействительная updateDomain (форма Формы, @MappingTarget домен домен) – seneque

+0

Это работает! Большое спасибо! Ты спас свой день. –

ответ

1

обращу в ответ на замечание @ seneque в ,
Я могу передать ссылку объекта, поэтому картограф не создаст новый, используя аннотацию @MappingTarget.

void updateDomain(Form form, @MappingTarget Domain domain) 
Смежные вопросы