У меня есть 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 ...
Спасибо
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
}
Я знаю, что у меня есть spi, я не знаю, как его реализовать