2

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>
MrA
  • 85
  • 1
  • 1
  • 9

0 Answers0