Skip to content

Ignoring unmapped source properties in inverse inheritance #2949

Description

@rokkolesa

I ran into a problem when upgrading from 1.4.2.Final to 1.5.2.Final regarding ignoring unmapped source properties and inverse inheritance.

Consider the mapping:

    @InheritInverseConfiguration(name = "toModel")
    public abstract Product toEntity(ProductDto model);

    @BeanMapping(ignoreUnmappedSourceProperties = { "property1", "property2", "property3" })
    public abstract ProductDto toModel(Product entity);

In version 1.4.2.Final the result was as expected with the properties being ignored in the generated mapper.
In compile-time I got the warning for toEntity with the message Unmapped target properties; "property1, property2, property3 (with the quotes exactly as I wrote them), which is weird in itself as I expected that these properties would be ignored as source and target switch places in inverse configuration.
Nevertheless, this was only a warning and I was not bothered by it.

Then I upgraded mapstruct to version 1.5.2.Final and I started getting the error Ignored unknown source properties: "property1, property2, property3.
It seems that the ignoreUnmappedSourceProperties was inherited as-is and the role was not switched from source to target.
The toEntity method behaves like I want to ignore source properties when I actually want to ignore target properties as read from the inverse configuration.

There does not seem to be a way to lower the level from ERROR to WARN to at least suppress the compile error.
I can work around this concrete issue explicitly defining @Mapping(target = "property1", ignore = true) on the toEntity method for each property.
But this means that I have to duplicate all property names on both sides in all the mappers currently using this inverse configuration approach.

This is probably related to #2481 as this error message was introduced with that change.

It seems that this is a bug.. If I want to ignore some source properties there is a high chance that these properties do not exist on the target type.
In that case I will always get a compile error unless I duplicate the property names using the @Mapping annotation.
So I have to approach in two different ways to ignore properties that exist in only 1 of these classes.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions