Javers @diffIgnore at class/property level not working with inheritance

Viewed 439

We are building an application that needs to store differences made on existing opbjects. Afterwards we will store these changes to the database. However for some reason the @diffIgnore option is not working on our User.class.

Every object extends our baseEntityCMS class, which has a property User. This is meant to store our update user information after the compare by JaVers is done. For some reason the user object is still compared even after setting @diffIgnore on property level and on class level.

Here is the code:

BaseEntityCMS.java

public class BaseEntityCMS extends BaseEntity {

    private Boolean active;
    private LocalDateTime inactiveDateTime;
    private LocalDate creationDate;// in original application
    private LocalDate importDate;
    private LocalDate startDate;
    private LocalDate endDate;
    @Embedded
    @DiffIgnore
    private User modifierUser;

...
}

CodeList.java

public class CodeList extends BaseEntityCMS {

    private String companyCode;
    private Application sourceApplication;
    private String name;
    private String format;
    private int length;
    @OneToMany(cascade = CascadeType.ALL, mappedBy = "codeList")
    private List<Description> descriptionList;
    @ManyToMany(cascade = CascadeType.ALL, mappedBy = "codeListList")
    private List<Keyword> keywords;
    private String domainOwner;
    @OneToMany(cascade = CascadeType.REFRESH)
    private List<Attribute> attributeList;

...
}

User.java

@Embeddable
@AllArgsConstructor
@Builder
@DiffIgnore
public class User {

    private String userName;
}

TestCodeList.java

@Test
    public void compareCodeListTest() {

        Javers javers = JaversBuilder.javers().withListCompareAlgorithm(ListCompareAlgorithm.LEVENSHTEIN_DISTANCE)
                .registerValueObject(BaseEntity.class).registerValue(Code.class).registerValue(Attribute.class)
                .registerValue(AttributeValue.class).registerValue(MapCodeAttribute.class)
                .registerValueObject(User.class).build();

        CodeList codeListNew = createCodeListTest("ServiceTest");
        CodeList codeListNew2 = createCodeListTest("ServiceTest");

        Diff diff = javers.compare(codeListNew2, codeListNew);
        assertNull(diff.getChanges());
    }

So in the test class we create 2 CodeLists (codeListNew and codeListNew2) with a standard method. Inside this method everything is created the same except we create a new User every time. Because all properties of codeList (attribute, attributeValue, ...) extend the BaseEntityCMS class they all have a User property.

This is the output we get:

changes on xxx.CodeList/ :
  - 'attributeList' collection changes :
    1. 'Attribute(name=Address, format=freeformat, length=10, numberOfDecimals=2, description=description attribute, optional=true)' changed to 'Attribute(name=Address, format=freeformat, length=10, numberOfDecimals=2, description=description attribute, optional=true)'
    0. 'Attribute(name=Number of employees, format=freeformat, length=10, numberOfDecimals=2, description=description attribute, optional=true)' changed to 'Attribute(name=Number of employees, format=freeformat, length=10, numberOfDecimals=2, description=description attribute, optional=true)'
  - 'mapCodeAttributeMap' map changes :
    'Code(super=BaseEntityCMS(super=BaseEntity(id=null), active=true, inactiveDateTime=null, creationDate=2020-03-23, importDate=2020-03-23, startDate=2020-03-23, endDate=2025-12-31, modifierUser=codems.agza.datalayer.model.User@57f83dc7), code=code1)' -> 'MapCodeAttribute(super=BaseEntity(id=null))' added
    'Code(super=BaseEntityCMS(super=BaseEntity(id=null), active=true, inactiveDateTime=null, creationDate=2020-03-23, importDate=2020-03-23, startDate=2020-03-23, endDate=2025-12-31, modifierUser=codems.agza.datalayer.model.User@75937998), code=code1)' -> 'MapCodeAttribute(super=BaseEntity(id=null))' removed

We actually expect no difference since everything is the same but the User. This user is marked with @DiffIngore? How come we still have differences?

Forgot: we use

        <dependency>
            <groupId>org.javers</groupId>
            <artifactId>javers-core</artifactId>
            <version>5.8.11</version>
        </dependency>
0 Answers
Related