Reputation: 1492
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?
Upvotes: 8
Views: 3712
Reputation: 21393
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.
Upvotes: 4