-
-
Notifications
You must be signed in to change notification settings - Fork 1k
Closed
Labels
Description
Expected behavior
I expected MapStruct to ignore the attributes of the secondaryEntity:
import javax.annotation.processing.Generated;
import poc.dtos.Dto;
import poc.entities.MainEntity;
import poc.entities.SecondaryEntity;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2023-03-10T14:33:10+0100",
comments = "version: 1.5.3.Final, compiler: IncrementalProcessingEnvironment from gradle-language-java-8.0.2.jar, environment: Java 17.0.4 (Eclipse Adoptium)"
)
public class MainEntityMapperImpl implements MainEntityMapper {
@Override
public MainEntity map(Dto dto, SecondaryEntity secondaryEntity) {
if ( dto == null && secondaryEntity == null ) {
return null;
}
MainEntity mainEntity = new MainEntity();
if ( dto != null ) {
mainEntity.setMainEntityAttribute( dto.getDtoAttribute() );
}
if ( secondaryEntity != null ) {
mainEntity.setOtherEntity( secondaryEntity );
//--- I expected MapStruct to not generate this line:
mainEntity.setEntityCommonAttribute( secondaryEntity.getEntityCommonAttribute() );
//---
}
return mainEntity;
}
}Actual behavior
MapStruct generates the following implementation which maps an attribute of secondaryEntity to the attribute of the same name in mainEntity:
import javax.annotation.processing.Generated;
import poc.dtos.Dto;
import poc.entities.MainEntity;
import poc.entities.SecondaryEntity;
@Generated(
value = "org.mapstruct.ap.MappingProcessor",
date = "2023-03-10T14:33:10+0100",
comments = "version: 1.5.3.Final, compiler: IncrementalProcessingEnvironment from gradle-language-java-8.0.2.jar, environment: Java 17.0.4 (Eclipse Adoptium)"
)
public class MainEntityMapperImpl implements MainEntityMapper {
@Override
public MainEntity map(Dto dto, SecondaryEntity secondaryEntity) {
if ( dto == null && secondaryEntity == null ) {
return null;
}
MainEntity mainEntity = new MainEntity();
if ( dto != null ) {
mainEntity.setMainEntityAttribute( dto.getDtoAttribute() );
}
if ( secondaryEntity != null ) {
mainEntity.setOtherEntity( secondaryEntity );
//---- HERE IS THE PROBLEM:
mainEntity.setEntityCommonAttribute( secondaryEntity.getEntityCommonAttribute() );
//----
}
return mainEntity;
}
}Steps to reproduce the problem
package poc.dtos;
public class Dto {
private String dtoAttribute;
public String getDtoAttribute() {
return dtoAttribute;
}
public void setDtoAttribute(String dtoAttribute) {
this.dtoAttribute = dtoAttribute;
}
}package poc.entities;
public class MainEntity {
private String mainEntityAttribute;
private String entityCommonAttribute;
private SecondaryEntity otherEntity;
public String getMainEntityAttribute() {
return mainEntityAttribute;
}
public void setMainEntityAttribute(String mainEntityAttribute) {
this.mainEntityAttribute = mainEntityAttribute;
}
public String getEntityCommonAttribute() {
return entityCommonAttribute;
}
public void setEntityCommonAttribute(String entityCommonAttribute) {
this.entityCommonAttribute = entityCommonAttribute;
}
public SecondaryEntity getOtherEntity() {
return otherEntity;
}
public void setOtherEntity(SecondaryEntity otherEntity) {
this.otherEntity = otherEntity;
}
}package poc.entities;
public class SecondaryEntity {
private String entityCommonAttribute;
public String getEntityCommonAttribute() {
return entityCommonAttribute;
}
public void setEntityCommonAttribute(String entityCommonAttribute) {
this.entityCommonAttribute = entityCommonAttribute;
}
}package poc.mappers;
import org.mapstruct.Mapper;
import org.mapstruct.Mapping;
import poc.dtos.Dto;
import poc.entities.MainEntity;
import poc.entities.SecondaryEntity;
@Mapper
public interface MainEntityMapper {
@Mapping(source = "dto.dtoAttribute", target = "mainEntityAttribute")
@Mapping(source = "secondaryEntity", target = "otherEntity")
@Mapping(source = "secondaryEntity", target = ".", ignore = true)
MainEntity map(Dto dto, SecondaryEntity secondaryEntity);
}MapStruct Version
MapStruct 1.5.3.Final