antohoho:
それは、ネストされたオブジェクトのコレクションに親オブジェクトフォーム値を伝播することは可能ですか?例えば
ソースDTOクラス
class CarDTO {
private String name;
private long userId;
private Set<WheelDto> wheels;
};
class WheelDto {
private String name;
}
ターゲットエンティティクラス
class Car {
private String name;
private long userId;
private Set<Wheel> wheels;
};
class Wheel {
private String name;
private long lastUserId;
}
あなたは、私がWheelDtoにlastUserIdを持っていない見ることができたとして、それゆえ私は、私が試した、車輪のコレクション内の各オブジェクトにWheelDtoにlastUserIdにCarDtoからのuserIdをマッピングしたいと思います
@Mapping(target = "wheels.lastUserId", source = "userId")
しかし運ません
フィリップ:
現在はプロパティを渡すことはできません。ただし、経由でこれを解決することができ@AfterMapping
、および/または@Context
。
カーマッピング後の更新ホイール
これは、しかし、あなたが上で二回反復する必要があるだろうことを意味しますWheel
。それはのように見ることができます
@Mapper
public interface CarMapper {
Car map(CarDto carDto);
@AfterMapping
default void afterCarMapping(@MappingTarget Car car, CarDto carDto) {
car.getWheels().forEach(wheel -> wheel.setLastUserId(carDto.getUserId()));
}
}
マッピング・ホイールがマッピング時の状態を持つようにしながら、@Contextを渡し
あなたはを通して一度だけ反復処理したい場合はWheel
、あなたが渡すことができます@Context
からのuserIdになるだろうオブジェクトCarDto
車をマッピングする前に、その後にそれを設定しWheel
た後、マッピングでは。このマッパーは次のように見ることができます:
@Mapper
public interface CarMapper {
Car map(CarDto carDto, @Context CarContext context);
Wheel map(WheelDto wheelDto, @Context CarContext context);
}
public class CarContext {
private String lastUserId;
@BeforeMapping
public void beforeCarMapping(CarDto carDto) {
this.lastUserId = carDto.getUserId();
}
@AfterMapping
public void afterWheelMapping(@MappingTarget Wheel wheel) {
wheel.setLastUserId(lastUserId);
}
}
CarContext
ホイールマッピングメソッドに渡されます。