Условное отображение в mapstruct

У меня есть dto от jackson и его база данных обновлений с orm hibernate:

class dto {

string f1;
bool isModifiedF1;

string f2;
bool isModifiedF2;

setF1(str s) {
this.isModifiedF1 = true;
this.f1 = s;
}

setF2(str s) {
this.isModifiedF2 = true;
this.f2 = s;
}

//othre setter like that
}

мне нравится хвастаться вот так:

classMpperImpl {

modify(dto , entity) {

if(dto.isModifedF1){
entity.setF1(dto.getF1);
}

if(dto.isModifedF2){
entity.setF1(dto.getF2);
}

//and other method

}


}

как это сделать ? Я блокирую суть для работы со всеми полями, и пока я просто игнорирую это важное поле, которое мне нужно, и устанавливаю его вручную с помощью @AfterMapping Мне нужно избегать любого неизмененного поля в спящем режиме, например, поля casade create ...

Спасибо

Я знаю, что у меня есть spi, я не знаю, как его реализовать

Mohsen 13.09.2018 22:52
0
1
3 052
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

MapStruct имеет понятие проверки присутствия. Подробнее в разделе Проверка наличия источника справочной документации.

На самом деле вам нужно использовать что-то вроде hasF1, и MapStruct вызовет этот метод. Для вашего конкретного примера это будет выглядеть так:

class Dto {

    private string f1;
    private boolean isModifiedF1;

    private string f2;
    private boolean isModifiedF2;

    public boolean hasF1() {
        return isModifiedF1;
    }

    public void setF1(str s) {
        this.isModifiedF1 = true;
        this.f1 = s;
    }

    public boolean hasF2() {
        return isModifiedF2;
    }

    public void setF2(str s) {
        this.isModifiedF2 = true;
        this.f2 = s;
    } 

    // Others
}

И тогда в сгенерированном коде MapStruct сделает что-то вроде

class DtoMapperImpl {

    public void modify(Dto dto, Entity entity) {

    if(dto.hasF1()){
        entity.setF1(dto.getF1());
    }

    if(dto.hasF2()){
        entity.setF2(dto.getF2());
    }

    //and other method

}

Другие вопросы по теме