Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Mapstruct: update individual models in collection

I am trying to update a collection using mapstruct like this:

List<Passenger> updatePassengers(@MappingTarget List<Passenger> passengers, List<Passenger> sourcePassenger);
Passenger updatePassenger(@MappingTarget Passenger passenger, Passenger sourcePassenger);

Now in generated sources updatePassenger method is generated as below:

public List<Passenger> updatePassengers(List<Passenger> passengers, List<Passenger> sourcePassenger) {
    if ( sourcePassenger == null ) {
        return null;
    }

    passengers.clear();
    for ( Passenger passenger : sourcePassenger ) {
        passengers.add( passenger );
    }

    return passengers;
}

Here its removing the passenger from the destination and setting passengers from source. I want to update individual passenger objects.

I went through the mapstruct docs and it says that it clears collection before updating.

Is there a way mapstruct could call updatePassenger method for each passenger?

like image 535
Saheb Avatar asked Jun 30 '26 13:06

Saheb


1 Answers

In case you don't want the default behaviour of MapStruct kicking in you should write your own custom method that would perform the update.

default List<Passenger updatePassengers(List<Passenger> passenger, Lit<Passenger> sourcePassengers) {
    //Do your logic here
}

On top of that, MapStruct cannot generate the code you need it doesn't know which passenger should be linked with which passenger.

In your definition you are saying that you want the passenger list to be update with the sourcePassengers list.

like image 118
Filip Avatar answered Jul 03 '26 04:07

Filip



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!