Не понял, как передать дополнительные аргументы или альтернативу.

В настоящее время я сопоставляю Order и OrderLines. Оба объекта разные и требуют @mappings. Пример У меня есть объекты Order и OrderRequest, которые отличаются друг от друга и нуждаются в аннотации @Mappings для сопоставления значений, как и в OrderLines.

Я создал следующих картографов

  • OrderMapper (использует = OrderLineMappers.class)
  • OrderLineMappers (использует = OrderLineMapper.class)
  • OrderLineMapper

Итак, моя проблема в том, что OrderLine нужен OrderId из объекта Order. Однако в OrderLineMapper он проходит в OrderLine, а не в Order. Как я могу отправить OrderId в OrderLineMapper? В настоящее время у меня есть OrderMapper, выполняющий @AfterMapper, перебирая строки orderLines и заполняя OrderId.

Любая помощь была бы велика.

Класс OrderMapper

@Mapper(componentModel = "spring",  uses = {OrderLineMappers.class})
public abstract class OrderMapper {

@AfterMapping
protected void orderRequestFromOrder( Order order, @MappingTarget 
OrderRequest orderRequest ) {

    //Wanting to do this at the OrderLineMapper class and not here
    String orderId = order.getId();
    List<OrderLineRequest> lines = orderRequest.getOrderLines();
    List<OrderLineRequest> updatedLines = new ArrayList<>();
    for (OrderLineRequest line : lines) {
        line.setOrderId(orderId);
        updatedLines.add(line);
    }
    orderRequest.setOrderLines(updatedLines);
}

@Mappings({
    @Mapping( source = "orderId", target = "id" ),
    @Mapping( source = "orderNumber", target = "order_number" ),
    @Mapping( source = "orderLines", target = "orderLines")
})
public abstract Order orderRequestToOrder(OrderRequest orderRequest);

Класс OrderLineMappers

@Mapper(componentModel = "spring",  uses = {OrderLineMapper.class})
public interface OrderLineMappers {

    List<OrderLine> orderLines(List<OrderLineRequest> orderLineRequest);

    @InheritInverseConfiguration
    List<OrderLineRequest> orderLineRequests(List<OrderLine> orderLine); 

}

Класс OrderLineMapper

@Mapper(componentModel = "spring")
public abstract class OrderLineMapper {
    @Mappings({
        @Mapping( target = "orderId", source = "orderLineId" ),
        @Mapping( target = "order_line_number", source = "orderLineNumber")

    })
    public abstract OrderLine orderLineRequestToOrderLine(OrderLineRequest orderLineRequest);
}

Снова просто пытаюсь передать OrderId в OrderLineMapper. Не знаю, как это сделать.

4
shadley 24 Май 2018 в 23:33

1 ответ

Лучший ответ

Вы действительно не можете этого сделать. Вместо этого вы можете использовать @Context и выполнять в нем свою логику. У вас могут быть @AfterMapping и @BeforeMapping в вашем контексте, где вы можете сохранить идентификатор Order и использовать его во время его выполнения

2
Filip 31 Май 2018 в 20:10