Java MapStruct似乎创建了太多的方法

Java MapStruct似乎创建了太多的方法,java,spring,mapping,dto,mapstruct,Java,Spring,Mapping,Dto,Mapstruct,我使用MapStructV1.4.1.Final将Hibernate实体映射到相应的DTO。我使用的是Spring Boot,因此我的映射器类的componentModel等于Spring 我有两个实体,个人和地址人员包含一个地址实例: 人 公共类人物{ 私有字符串用户名; 私有字符串名称; 私人地址; } public class PersonDto{ 私有字符串id; 私有字符串名称; 私人地址到地址; 私有字符串角色; } 地址 公共类地址{ 私有字符串地址; 私人城市; } 公共类

我使用MapStructV1.4.1.Final将Hibernate实体映射到相应的DTO。我使用的是Spring Boot,因此我的映射器类的
componentModel
等于
Spring

我有两个实体,
个人
地址
<代码>人员包含一个
地址
实例:

公共类人物{
私有字符串用户名;
私有字符串名称;
私人地址;
}
public class PersonDto{
私有字符串id;
私有字符串名称;
私人地址到地址;
私有字符串角色;
}
地址

公共类地址{
私有字符串地址;
私人城市;
}
公共类地址到{
私有字符串地址;
私人城市;
}
以下是我写的地图绘制者:

制图者

@Mapper(componentModel=“spring”)
公共接口地址映射器{
@映射(source=“person.username”,target=“username”)
@映射(source=“address.addr”,target=“address”)
交付地址发送至个人和地址发送至地址发送至(个人,地址);
@映射(source=“person.username”,target=“username”)
@映射(source=“person.address.addr”,target=“address”)
发货地址发送至个人发货地址发送至(个人);
@映射(source=“address.addr”,target=“houseAddress”)
AddressdToAddressToAddressdTo(地址地址);
@InheritInverseConfiguration(name=“addressToAddressDto”)
地址到地址(地址到地址到地址);
}
@Mapper(componentModel=“spring”,使用={AddressMapper.class})
公共接口人{
@映射(source=“id”,target=“username”)
@映射(source=“address.houseAddress”,target=“address.addr”)
@映射(source=“role”,target=“role.id”)
人对人(PersonDto PersonDto);
列出人物(列出人物);
@继承反向配置(name=“toPerson”)
PersonDto toPersonDto(个人);
列出要列出的人员(列出人员);
/**
*使用Dto信息更新现有人员。
*在现有对象(人)上设置信息,而不创建新对象。
*/
@映射(source=“role”,target=“role.id”)
void updatePersonFromDto(PersonDto PersonDto,@MappingTarget Person);
}
您可以看到,我告诉
PersonMapper
使用
AddressMapper
来使用它的实现

但是,对于地址到地址dto的转换,我在
PersonMapper
类中找到了另一个实现(反向映射也是如此):

地址映射器实现
@已生成(
value=“org.mapstruct.ap.MappingProcessor”,
日期=“2020-11-21T15:44:55+0100”,
comments=“version:1.4.1.Final,编译器:javac,环境:java11(Oracle公司)”
)
@组成部分
公共类AddressMapperImpl实现AddressMapper{
@凌驾
公共交付地址发送至个人和地址发送至地址发送至(个人,地址){
if(person==null&&address==null){
返回null;
}
DeliveryAddressDto DeliveryAddressDto=新的DeliveryAddressDto();
if(person!=null){
deliveryAddressDto.setUserName(person.getUsername());
}
if(地址!=null){
deliveryAddressDto.setAddress(address.getAddr());
}
将交货地址返回至;
}
@凌驾
公共递送地址发送至个人递送地址发送至(个人){
if(person==null){
返回null;
}
DeliveryAddressDto DeliveryAddressDto=新的DeliveryAddressDto();
deliveryAddressDto.setUserName(person.getUsername());
deliveryAddressDto.setAddress(PersonalAddressAddressAddress(person));
将交货地址返回至;
}
@凌驾
公共地址到地址到地址(地址){
如果(地址==null){
返回null;
}
AddressDto AddressDto=新地址DTO();
addressDto.setHouseAddress(address.getAddr());
addressDto.setCity(address.getCity());
返回地址到;
}
@凌驾
公共广播AddressToAddress(AddressToAddressTo){
if(addressDto==null){
返回null;
}
地址=新地址();
address.setAddr(addressDto.getHouseAddress());
address.setCity(addressDto.getCity());
回信地址;
}
私有字符串PersonalAddressAddressAddress(Person){
if(person==null){
返回null;
}
地址=person.getAddress();
如果(地址==null){
返回null;
}
字符串addr=address.getAddr();
if(addr==null){
返回null;
}
返回地址;
}
}
PersonMapper实现
@已生成(
value=“org.mapstruct.ap.MappingProcessor”,
日期=“2020-11-21T15:44:55+0100”,
comments=“version:1.4.1.Final,编译器:javac,环境:java11(Oracle公司)”
)
@组成部分
公共类PersonMapperImpl实现PersonMapper{
@自动连线
专用地址映射器地址映射器;
@凌驾
公众人物-个人(PersonDto PersonDto){
if(personDto==null){
返回null;
}
Person=新人();
person.setAddress(AddressdToAddress1(personDto.getAddress());
person.setRole(personDtoToRole(personDto));
person.setUsername(personDto.getId());
person.setName(personDto.getName());
返回人;
}
@凌驾
公众人物列表(人物列表){
if(personDtos==null){
返回null;
}
List List=新的ArrayList(personDtos.size()
@Mapping(source = "id", target = "username")
@Mapping(source = "address.houseAddress", target = "address.addr")
Person toPerson(PersonDto personDto);
@Mapping(source = "id", target = "username")
Person toPerson(PersonDto personDto);
@Mapping(source = "id", target = "username")
@Mapping(source = "address", target = "address")
Person toPerson(PersonDto personDto);