Lỗi jpa 2.1 requires java 1.5 or newer năm 2024

1208 Fixed WriteConflict when using transactional MongoRepository. Writing to the

public interface CustomValueComparator<T> {
  ...
  /**
  • This flag is used to indicate to Javers whether
  • a comparator implementation wants to handle nulls. *
  • By default, the flag is false and Javers
  • checks if both values are non-null before calling a comparator.
  • If any of given values is null — Javers compares them using the
  • standard Java logic:
  • * null == null
  • null != non-null
  • If the flag is true — Javers skips that logic and
  • allows a comparator to handle nulls on its own.
  • In that case, a comparator holds responsibility for null-safety. *
  • @see NullAsBlankStringComparator */ default boolean handlesNulls() { return false; } }

2 collection is now skipped when RANDOM commitId generator is selected. The fix requires enabling the RANDOM CommitId generator. RANDOM CommitId generator should always be used when multiple instances of Javers write to the same database.

javers:
  commitIdGenerator: random

7.2.0

released on 2023-07-16

  • 1306 Added posibility to configure properties as shallow references via ` public interface CustomValueComparator<T> { ... /
    • This flag is used to indicate to Javers whether
    • a comparator implementation wants to handle nulls.
    • By default, the flag is false and Javers
    • checks if both values are non-null before calling a comparator.
    • If any of given values is null — Javers compares them using the
    • standard Java logic:
    • * null == null
    • * null != non-null
    • If the flag is true — Javers skips that logic and
    • allows a comparator to handle nulls on its own.
    • In that case, a comparator holds responsibility for null-safety.
    • @see NullAsBlankStringComparator

      */ default boolean handlesNulls() {

      return false;  
      
      } }

      3. Usage:

      Javers javers = javers().registerEntity(
          EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                  .withShallowProperties(["myShallowProperty"])  
                  .build())  
          .build()  
      
      `

7.1.0

released on 2023-07-12

  • 1300 Fixed issue with connecting to Mongo on Spring Boot 3.1.0.
  • Dependencies aligned with Spring Boot 3.1.0:

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

7.0.3

released on 2023-07-11

  • 1287 Fixed bug in interpreting the ` public interface CustomValueComparator<T> { ... /
    • This flag is used to indicate to Javers whether
    • a comparator implementation wants to handle nulls.
    • By default, the flag is false and Javers
    • checks if both values are non-null before calling a comparator.
    • If any of given values is null — Javers compares them using the
    • standard Java logic:
    • * null == null
    • * null != non-null
    • If the flag is true — Javers skips that logic and
    • allows a comparator to handle nulls on its own.
    • In that case, a comparator holds responsibility for null-safety.
    • @see NullAsBlankStringComparator

      */ default boolean handlesNulls() {

      return false;  
      
      } }

      ` 4 annotation.

7.0.2

released on 2023-07-09

  • 1213 Performance optimization in SQL repository. The number of calls to ` public interface CustomValueComparator<T> { ... /
    • This flag is used to indicate to Javers whether
    • a comparator implementation wants to handle nulls.
    • By default, the flag is false and Javers
    • checks if both values are non-null before calling a comparator.
    • If any of given values is null — Javers compares them using the
    • standard Java logic:
    • * null == null
    • * null != non-null
    • If the flag is true — Javers skips that logic and
    • allows a comparator to handle nulls on its own.
    • In that case, a comparator holds responsibility for null-safety.
    • @see NullAsBlankStringComparator

      */ default boolean handlesNulls() {

      return false;  
      
      } }

      ` 5 is significantly reduced. Thanks to that – less SQL queries are executed by Javers.

7.0.1

released on 2023-06-18

  • 1298 Guava version bump as Guava < 32.0 is marked as vulnerable to CVE-2023-2976.

7.0.0

released on 2023-04-24

1238 Added compatibility with Spring Boot 3.0.

Time to say goodbye to our beloved Java 8.

Spring Boot 3.0 has moved forward and is no longer compatible with Java 8. Now, Spring Boot 3.0 requires Java 17 — so we all need to catch up.

Since Javers 7.0, all Javers Spring integration modules require Java 17:

  • ` public interface CustomValueComparator<T> { ... /
    • This flag is used to indicate to Javers whether
    • a comparator implementation wants to handle nulls.
    • By default, the flag is false and Javers
    • checks if both values are non-null before calling a comparator.
    • If any of given values is null — Javers compares them using the
    • standard Java logic:
    • * null == null
    • * null != non-null
    • If the flag is true — Javers skips that logic and
    • allows a comparator to handle nulls on its own.
    • In that case, a comparator holds responsibility for null-safety.
    • @see NullAsBlankStringComparator

      */ default boolean handlesNulls() {

      return false;  
      
      } }

      ` 6
  • ` public interface CustomValueComparator<T> { ... /
    • This flag is used to indicate to Javers whether
    • a comparator implementation wants to handle nulls.
    • By default, the flag is false and Javers
    • checks if both values are non-null before calling a comparator.
    • If any of given values is null — Javers compares them using the
    • standard Java logic:
    • * null == null
    • * null != non-null
    • If the flag is true — Javers skips that logic and
    • allows a comparator to handle nulls on its own.
    • In that case, a comparator holds responsibility for null-safety.
    • @see NullAsBlankStringComparator

      */ default boolean handlesNulls() {

      return false;  
      
      } }

      ` 7
  • ` public interface CustomValueComparator<T> { ... /
    • This flag is used to indicate to Javers whether
    • a comparator implementation wants to handle nulls.
    • By default, the flag is false and Javers
    • checks if both values are non-null before calling a comparator.
    • If any of given values is null — Javers compares them using the
    • standard Java logic:
    • * null == null
    • * null != non-null
    • If the flag is true — Javers skips that logic and
    • allows a comparator to handle nulls on its own.
    • In that case, a comparator holds responsibility for null-safety.
    • @see NullAsBlankStringComparator

      */ default boolean handlesNulls() {

      return false;  
      
      } }

      ` 8
  • @Bean JaversBuilderPlugin javersBuilderPlugin() {

    return builder -> builder  
        .registerValue(BigDecimal.class, new CustomBigDecimalComparator(2));  
    
    }

    6
  • springVersion =5.3.10 springBootVersion =2.5.5 springDataCommonsVersion=2.5.5 springDataMongoVersion =3.2.5 springSecurityVersion =5.5.2 mongoDbDriverVersion =4.2.3 hibernateVersion =5.4.32.Final guavaVersion =31.0-jre gsonVersion =2.8.8 classgraphVersion =4.8.128

    0

Javers core and Javers persistence modules require Java 11:

  • springVersion =5.3.10 springBootVersion =2.5.5 springDataCommonsVersion=2.5.5 springDataMongoVersion =3.2.5 springSecurityVersion =5.5.2 mongoDbDriverVersion =4.2.3 hibernateVersion =5.4.32.Final guavaVersion =31.0-jre gsonVersion =2.8.8 classgraphVersion =4.8.128

    1
  • springVersion =5.3.10 springBootVersion =2.5.5 springDataCommonsVersion=2.5.5 springDataMongoVersion =3.2.5 springSecurityVersion =5.5.2 mongoDbDriverVersion =4.2.3 hibernateVersion =5.4.32.Final guavaVersion =31.0-jre gsonVersion =2.8.8 classgraphVersion =4.8.128

    2
  • springVersion =5.3.10 springBootVersion =2.5.5 springDataCommonsVersion=2.5.5 springDataMongoVersion =3.2.5 springSecurityVersion =5.5.2 mongoDbDriverVersion =4.2.3 hibernateVersion =5.4.32.Final guavaVersion =31.0-jre gsonVersion =2.8.8 classgraphVersion =4.8.128

    3:

The last version of Javers that is compatible with Java 8 and Spring Boot 2 is 6.14.0. We strongly recommend to upgrade to Javers 7.x. You can still use Javers 6.14.0, but the 6.x line is frozen and no longer supported.

Migration from Javers 6.x to Javers 7.x

  • No actions required from the Javer’s perspective.
  • A friendly reminder if you are upgrading to Java 17 — the built-in

    springVersion =5.3.10 springBootVersion =2.5.5 springDataCommonsVersion=2.5.5 springDataMongoVersion =3.2.5 springSecurityVersion =5.5.2 mongoDbDriverVersion =4.2.3 hibernateVersion =5.4.32.Final guavaVersion =31.0-jre gsonVersion =2.8.8 classgraphVersion =4.8.128

    4 package disappeared and should be replaced with the

    springVersion =5.3.10 springBootVersion =2.5.5 springDataCommonsVersion=2.5.5 springDataMongoVersion =3.2.5 springSecurityVersion =5.5.2 mongoDbDriverVersion =4.2.3 hibernateVersion =5.4.32.Final guavaVersion =31.0-jre gsonVersion =2.8.8 classgraphVersion =4.8.128

    5 package from

    springVersion =5.3.10 springBootVersion =2.5.5 springDataCommonsVersion=2.5.5 springDataMongoVersion =3.2.5 springSecurityVersion =5.5.2 mongoDbDriverVersion =4.2.3 hibernateVersion =5.4.32.Final guavaVersion =31.0-jre gsonVersion =2.8.8 classgraphVersion =4.8.128

    6.

6.14.0

released on 2023-03-31

  • 1230 Fixed bug in JaversBuilder. Scanned classes were ignoring custom value comparators for their properties.

6.13.0

released on 2023-03-22

  • 1252 The internal GSON config is tuned to better map numeric values with Object type.

6.12.0

released on 2023-03-17

  • 1257 Added option for implementing application-Layer encryption of Snapshot State in SQL repository. See usage in Case1257ApplicationLayerEncryption.groovy

6.10.0

released on 2023-02-17

  • 1254 Added possibility to disable the schema management in Mongo Repository. Usage:
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    See also MongoE2EWithSchemaEnabledTest.groovy
  • 1261 Added possibility to set Mongo Repository parameters:

    springVersion =5.3.10 springBootVersion =2.5.5 springDataCommonsVersion=2.5.5 springDataMongoVersion =3.2.5 springSecurityVersion =5.5.2 mongoDbDriverVersion =4.2.3 hibernateVersion =5.4.32.Final guavaVersion =31.0-jre gsonVersion =2.8.8 classgraphVersion =4.8.128

    7,

    springVersion =5.3.10 springBootVersion =2.5.5 springDataCommonsVersion=2.5.5 springDataMongoVersion =3.2.5 springSecurityVersion =5.5.2 mongoDbDriverVersion =4.2.3 hibernateVersion =5.4.32.Final guavaVersion =31.0-jre gsonVersion =2.8.8 classgraphVersion =4.8.128

    8, and

    springVersion =5.3.10 springBootVersion =2.5.5 springDataCommonsVersion=2.5.5 springDataMongoVersion =3.2.5 springSecurityVersion =5.5.2 mongoDbDriverVersion =4.2.3 hibernateVersion =5.4.32.Final guavaVersion =31.0-jre gsonVersion =2.8.8 classgraphVersion =4.8.128

    9 via Spring boot configuration. Example usage in `application.yml:

    javers:
    snapshotCollectionName: "jv_custom_snapshots"  
    headCollectionName: "jv_custom_head_id"  
    schemaManagementEnabled: false  
    

7.0.0-RC3

released on 2023-02-03

  • RC for 7.0.0

6.9.1

released on 2023-02-01

  • 1254 Added possibility to customize the HEAD collection name in MongoRepository.

    Usage:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
                      mongoRepositoryConfiguration()  
                              .withSnapshotCollectionName("jv_custom_snapshots")  
                              .withHeadCollectionName("jv_custom_head_id")  
                              .build())  
    
    See also MongoE2EWithCustomHeadCollectionNameTest.groovy

6.8.2

released on 2023-01-02

  • Dependencies aligned with Spring Boot 2.7.7:

springVersion           =5.3.24
springBootVersion       =2.7.7
springDataCommonsVersion=2.7.6
springDataMongoVersion  =3.4.6
springSecurityVersion   =5.7.6
mongoDbDriverVersion    =4.6.1
hibernateVersion        =5.6.14.Final
guavaVersion            =31.0-jre
gsonVersion             =2.9.0
classgraphVersion       =4.8.128

  • In tests, Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    00 Embedded MongoDB is replaced with

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    01 dockerized MongoDB.

6.8.1

released on 2022-12-24

  • 1168 Fixed bug related to H2 version 2.0.204.

6.8.0

released on 2022-10-26

  • 1223 Implemented partial and case-insensitive search for Author and Commit Properties.

6.7.1

released on 2022-10-02

  • 1222 Fixed validation in Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    02.

6.7.0

released on 2022-09-11

  • 1216 Added a new switch in the diff algorithm: Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
  • This switch affects how initial and terminal Value Changes are calculated in the situation when a primitive property with a default value appears (or disappears) in an object graph. See

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    04.

6.6.5

released on 2022-04-18

  • 1200 Fixed

    springVersion =5.3.24 springBootVersion =2.7.7 springDataCommonsVersion=2.7.6 springDataMongoVersion =3.4.6 springSecurityVersion =5.7.6 mongoDbDriverVersion =4.6.1 hibernateVersion =5.6.14.Final guavaVersion =31.0-jre gsonVersion =2.9.0 classgraphVersion =4.8.128

    7 on Java 16 for

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    06,

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    07, and

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    08.

6.6.4

released on 2022-04-10

  • 1192 Fixed important performance issue for MongoDB. Indexes on the Snapshots collection were not created by the for MongoDB. This bug was introduced in 6.5.1. It’s enough to upgrade to the latest version and the indexes will be automatically created.

6.6.3

released on 2022-03-06

  • 1188 Fixed exception Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    09

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    10 when Javers was used with Gson 2.9.0.

6.6.2

released on 2022-01-30

  • 1180 Fixed NPE in Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    11.

6.6.1

released on 2022-01-26

  • 1177 Added possibility to register Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    12s in Javers’ Spring Boot Starters. Thanks to that, you can easily call any JaversBuilder method and for example, register a

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    13:

    @Bean JaversBuilderPlugin javersBuilderPlugin() {

    return builder -> builder  
        .registerValue(BigDecimal.class, new CustomBigDecimalComparator(2));  
    
    }

    See the full test case in this PR: https://github.com/javers/javers/pull/1177/files.

6.6.0

released on 2022-01-23

  • 1169 Added possibility to configure the name of the Snapshot collection in MongoDB. See MongoE2EWithCustomCollectionNameTest.groovy.

6.5.3

released on 2021-12-04

  • 1157 Fixed bug when comparing nested sets of Value Objects.

6.5.2

released on 2021-11-23

  • 1160 Fixed Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    14 when calling

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    15 created by

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    16.
  • 1075 Added a new feature which allows Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    17 to handle nulls:

public interface CustomValueComparator<T> {
  ...
  /**
  • This flag is used to indicate to Javers whether
  • a comparator implementation wants to handle nulls. *
  • By default, the flag is false and Javers
  • checks if both values are non-null before calling a comparator.
  • If any of given values is null — Javers compares them using the
  • standard Java logic:
  • * null == null
  • null != non-null
  • If the flag is true — Javers skips that logic and
  • allows a comparator to handle nulls on its own.
  • In that case, a comparator holds responsibility for null-safety. *
  • @see NullAsBlankStringComparator */ default boolean handlesNulls() { return false; } }

6.5.1

released on 2021-11-14

  • 1137 Important new feature in MongoRepository. Added support for MongoDB multi-document ACID transactions introduced in MongoDB 4.0 and implemented in Spring Data MongoDB 2.1.

    See , . Minor breaking change: the

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    18 class is renamed to

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    19.
  • 1121 Fixed Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    20 when querying for object with solely TERMINAL snapshot.
  • Dependencies aligned with Spring Boot 2.5.5:

springVersion           =5.3.10
springBootVersion       =2.5.5
springDataCommonsVersion=2.5.5
springDataMongoVersion  =3.2.5
springSecurityVersion   =5.5.2
mongoDbDriverVersion    =4.2.3
hibernateVersion        =5.4.32.Final
guavaVersion            =31.0-jre
gsonVersion             =2.8.8
classgraphVersion       =4.8.128

6.4.1

released on 2021-10-18

  • 912 Added support for querying on a commit property with multiple values using “IN” semantics. Usage:

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

0

6.4.0

released on 2021-10-16

  • 1094 Provided access to old and new Collection, Array, and Map values within Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    21,

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    22, and

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    23 types. For example:

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

1

6.3.0

released on 2021-10-09

  • 1099 Fixed Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    24 when comparing complex Map types with Collections of objects, like:

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

2

Since this version, these structures are fully supported.

6.2.5

released on 2021-09-05

  • 1134 Fixed compatibility issue with the latest Hibernate version 5.6.0.beta1.
  • 1130 Fixed bug in Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    25. It returns now the right (new) version of an object.

6.2.4

released on 2021-08-24

  • 1096 added Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    26 method to query for commit properties with

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    27 operator.

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

3

6.2.3

released on 2021-07-04

  • Another fix for 1091, solved problem with Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    28 on Java 16.

6.2.2

released on 2021-06-19

  • 1108 Added possibility to call Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    29 for objects which not exists in JaversRepository. Exception

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    30 is no longer thrown.

6.2.1

released on 2021-06-13

  • 1091 Added support for Java 16. Fixed

    springVersion =5.3.24 springBootVersion =2.7.7 springDataCommonsVersion=2.7.6 springDataMongoVersion =3.4.6 springSecurityVersion =5.7.6 mongoDbDriverVersion =4.6.1 hibernateVersion =5.6.14.Final guavaVersion =31.0-jre gsonVersion =2.9.0 classgraphVersion =4.8.128

    7 when serializing core Java types (like

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    32 or

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    33).

6.1.1

released on 2021-05-23

  • 1092 Fixed bug when deserializing Diff from JSON: Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    34: no such Change type -

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    35.

6.1.0

released on 2021-04-25

  • 1080 New annotation for auto-audit aspect — Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    36. It allows to call

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    37 on objects returned by method, for example:

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

4

or

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

5

  • 1055 Fixed Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    38 on Oracle.

6.0.1

released on 2021-04-07

1082 Changes in Spring dependencies management. In order to lower the risk of versions clash between dependencies required by Javers’ and dependencies required by an application (you), all Spring dependencies in Javers’ artifacts are marked as optional.

It means that Spring and Spring Boot versions are now managed only by an application:

@Bean
JaversBuilderPlugin javersBuilderPlugin() {
    return builder -> builder
        .registerValue(BigDecimal.class, new CustomBigDecimalComparator(2));
}

6 dependencies:

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

6

springVersion           =5.3.10
springBootVersion       =2.5.5
springDataCommonsVersion=2.5.5
springDataMongoVersion  =3.2.5
springSecurityVersion   =5.5.2
mongoDbDriverVersion    =4.2.3
hibernateVersion        =5.4.32.Final
guavaVersion            =31.0-jre
gsonVersion             =2.8.8
classgraphVersion       =4.8.128

0 dependencies:

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

7

6.0.0

released on 2021-04-05

Javers 6.0 comes with the important upgrade of the diff algorithm:

We have redesigned the Javers’ core algorithm — the object diff. Now, it gives better, more meaningful, and consistent results in both

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

16 and

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

42.

The new approach improves the diff results for New and Removed Objects thanks to the explicitly modeled and unified concepts of Initial and Terminal Changes.

Now, Javers generates additional set of Initial Changes for each property of a New Object to capture its state. Internally, Javers calculates Initial Changes by comparing a virtual, totally empty object with a real New Object.

Symmetrically, additional set of Terminal Changes is generated for each property of a Removed Object.

For example, consider the case when a Value Object is added:

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

8

Javers 5.x calculates a diff without information about the state of the new Address:

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

9

Javers 6.x calculates the essentially better diff:

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

0

So, in Javers 6.0, Value Objects (like

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

  1. are treated more like containers for nested properties owned by Entities and less like objects with their own indentity and type.

Calculating Initial and Terminal Changes is enabled by default. You can disable it using

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

44 and

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

45,

or in

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

46, if you are using Javers Spring Boot:

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

1

See the . See

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

45 javadoc.

All features and improvements added in Javers 6.0

  • 822 Fixed problem with paging in Shadow queries.

    Now,

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    48 and

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    49 works intuitively in both

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    50 and

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
  • Both query methods are unified and generate the same results (now,

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    52 is only the facade for

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    53). See the . and

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    54 javadoc.
  • More pretty and concise Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    55, see the .
  • The new Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    56 method for printing Changes in a technical style.
  • New or removed Value Objects no longer generate Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    57,

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    58, nor

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    59. These changes were considered rather useless. Instead, a state of a new or removed Value Object is captured by Initial and Terminal Changes.
  • New or removed Entities always generate Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    57/

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    58 changes (it can’t be disabled).
  • The Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    62 flag is renamed to

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    63 and it’s enabled by default.
  • The Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    64 flag is added, and it’s enabled by default.
  • In Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    42, a

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    57 change is always generated for each initial Snapshot, it can’t be disabled by the

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    63 flag.
  • The Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    68 method is deprecated and has no effect.
  • 911 Minor bug fixed, this WARNING is no longer shown: An illegal reflective access operation has occurred.
  • 1077 Added support for Composite Id with the Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    69 annotation.

5.15.0

released on 2021-03-12

  • 939 Added possibility to register Custom JSON TypeAdapters in Spring Boot Starters. See .

5.14.0

released on 2020-11-14

  • Dependencies aligned with Spring Boot 2.4.0:

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

2

  • 1034 Fixed compatibility issues ( Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    70 in

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
  • with the latest Hibernate.

5.13.2

released on 2020-10-26

  • 1030 Fixed class cast exception.
  • 998 Better javadoc for Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    54,

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    50, and

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    51.

5.13.0 Hacktoberfest 2020 Edition

released on 2020-10-16

  • 1024 Added support for Groovy 3.0.
  • 919 Added multi-value filter for querying by changed property: Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    75.

5.12.0

released on 2020-09-27

  • 1019 Added filters in JQL to select snapshots crteated before/after given UTC timestamp: Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    76 and

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    77.

5.11.2

released on 2020-08-31

  • 1014 Fixed issue with Shadows with Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    78 properties.

5.11.1

released on 2020-07-27

  • 940 New method in Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    79 to registering a strategy for dynamic marking classes as ignored. For example, you can define a custom rule to ignore classes by package name:

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

3

5.10.5

released on 2020-07-16

  • 941 Added configuration for customizing Javers’ table names in SQL repository.

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

80:

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

4

5.10.4

released on 2020-07-02

  • Fixed bug 958 when querying by Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    81 with minor number (like 1.01) on MongoDB.

5.10.3

released on 2020-07-04

  • Fixes for 996 and 692 — removed redundant Guava dependency.

5.10.2

released on 2020-07-04

  • 991 Api vs Implementation — mastering dependencies.

5.10.1

released on 2020-06-20

  • 988 Fixed: MissingProperty cannot be cast to class java.util.Map

5.10.0

released on 2020-06-15

** Important warning for Spring Boot MongoDB users!**

This version of Javers has all dependencies aligned with Spring Boot MongoDB 2.3.0 which has upgraded to MongoDB Java Drivers 4.x. Unfortunately, Mongo Drivers 4.x has a lot of problematic and braking changes, especially renaming

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

82 to

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

83 (see mongodb.github.io/mongo-java-driver/4.0/upgrading) .

If you have explicit dependency to

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

84 — remove it and rely on Mongo 4.x drivers provided by a Spring Boot MongoDB starter.

If you are using old Spring Boot version (2.1 or older) — you need to upgrade to Spring Boot 2.3.0, otherwise you will probably experience versions clash between your Spring Boot version, and the Spring Boot version imported by the Javers starter.

  • 982 Fixed issue with Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    85 on on Spring Boot 2.3.0.

Dependencies aligned with Spring Boot 2.3.0:

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

5

5.9.4

released on 2020-06-15

** Important for Spring Boot MongoDB users**

This is the last version of Javers compatible with Spring Boot MongoDB 2.1.x and 2.2.x

  • 981 Added Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    86 annotation to all Javers’ aspects. This change allows users to execute their own aspects before or after Javers’ aspects (by choosing positive ot negative order numbers).

5.9.1

released on 2020-05-26

  • 973 Fixed strange bug in Gradle build: Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    87 caused probably by

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    88.

5.9.0

released on 2020-05-03

  • 962 Changes in dedicated Mongo database configuration in . Additional client’s properties (like SSL or timeouts) should now be provided using the new Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    89 API (instead of deprecated

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    90 API). For example:

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

6

5.8.13

released on 2020-04-07

  • 948 Better support for properties with unknown types (with type tokens), like:

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

7

  • All JaVers’ dependencies are bumped to the latest versions:

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

8

5.8.12

released on 2020-03-31

  • 951 Dependencies management fix in

    springVersion =5.3.10 springBootVersion =2.5.5 springDataCommonsVersion=2.5.5 springDataMongoVersion =3.2.5 springSecurityVersion =5.5.2 mongoDbDriverVersion =4.2.3 hibernateVersion =5.4.32.Final guavaVersion =31.0-jre gsonVersion =2.8.8 classgraphVersion =4.8.128

    1. Guava and joda-time are now correctly marked as optional in

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    92.

5.8.11

released on 2020-03-08

  • 915 Added experimental asynchronous audit aspect for non Spring Data repositories. The aspect asynchronously commits all arguments passed to methods annotated with Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    93 annotation by calling

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    94.

Usage:

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

9

Spring config:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

0

See the full test case.

5.8.10

released on 2020-02-26

  • 938 Fixed bug in custom TypeAdapters priorities.

5.8.9

released on 2020-02-07

  • 935 Fixed Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    70: MissingProperty cannot be cast to java.lang.Double when using

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    13.

5.8.8

released on 2020-01-18

  • 933 Extend Spring props to allow setting size or disabling the latest snapshots cache for MongoDB.

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

1

5.8.7

released on 2019-12-13

  • 921 Added support for deleting by Id with the Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    97 aspect:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

2

5.8.6

released on 2019-12-06

  • 925 Fixed bug which caused Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    13 not being invoked for

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    99.

5.8.5

released on 2019-11-10

  • 910 Fixed

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    00 in MongoDB

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    01.

5.8.4

released on 2019-11-04

  • 897 Added warning when

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    02 is used on a class without declaring its package name in

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    03. Improved javadocs for

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    04 and

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    05.

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

3

5.8.3

released on 2019-11-02

  • 878 Added property to disabling Global Id cache in SQL repository when using JaVers Spring Boot starter:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

4

  • 709 Added property to provide custom implementation of the

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    06 when using JaVers Spring Boot starter:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

5

  • 886 Fixed bug causing

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    07: Expected BEGIN_OBJECT but was STRING. The exception was thrown on attempt to read Shadows with a ShallowReference with EmbeddedId (a ShallowReference with an Id-property type mapped to Value Object).

5.8.2

released on 2019-10-23

  • 894 Better Shadows sorting. Using

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    08 CommitId generator for distributed apps can cause duplicated

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    81. In this fix, Shadows sorting is unified to be based on

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    10 for both CommitId generators.
  • Removed throwing

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    11 in SQL repository. It was thrown only in some scenarios when

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    08 generator was used, not ensuring the full protections against duplicated CommitId. After this fix, duplicated CommitIds when using

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    08 generator are considered as not harmful (although not elegant). To ensure unique CommitIds for distributed apps we recommend switching to

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    14 generator (when your app runs more than one Javers instance).

5.8.1

released on 2019-10-21

Custom comparators reinvented

Now, a

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

13 has to implement the

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

16 method, which is used instead of

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

17 when Values are compared in hashing contexts. Thanks to that, Values with Custom comparators can be correctly compared anywhere, also when they are Set items, Map keys or fields in Value Objects inside Sets.

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

6

Existing method for registering Custom Value comparatorsis deprecated and left only for backward compatibility. Please switch to the new method.

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

7

The same applies to

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

18, it also have to implement

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

16 because it extends

Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)
                .withShallowProperties(["myShallowProperty"])
                .build())
        .build()

13.

This is the breaking change, if you are using a

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

18 you have add

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

16 implementation.

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

8

Since this version, we stop recommending

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

23 and Custom Types. This warning is added to docs:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

9

See updated documentation of .

5.7.7

released on 2019-10-03

  • 888 Fixed bug (introduced in 5.2.5) when comparing

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    24 and

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    25.

5.7.6

released on 2019-09-28

  • 887 Fixed bug (introduced in 5.7.2) which was causing

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    26 ORA-00917: missing comma while inserting to jv_snapshot on Oracle.

5.7.5

released on 2019-09-25

  • Dependencies bumped to the latest versions: javers:
    snapshotCollectionName: "jv_custom_snapshots"  
    headCollectionName: "jv_custom_head_id"  
    schemaManagementEnabled: false  
    
    0

5.7.4

released on 2019-09-19

  • 832 Added possibility to use

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    18 together with

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

  • springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    29. A custom

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    30 methods is used to compare two Lists without paying attention to ordering and duplicates. Warning! The list comparing algorithm would be slow in this case for large lists because it has n2 complexity.

5.7.2

released on 2019-09-11

  • 877 Fixed issue with the

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    31 table primary key sequence for clustered applications. The sequence allocation trick for the

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    31 table is discontinued. To maintain backward compatibility, since this version, numbers genereted by the

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    31 primary key sequence are multiplied by 100.

5.7.0

released on 2019-09-03

  • 870 Added possibility to provide object-specific properties via

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    34. No-arg

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    35 is deprecated. These three methods are added:

    javers:
    snapshotCollectionName: "jv_custom_snapshots"  
    headCollectionName: "jv_custom_head_id"  
    schemaManagementEnabled: false  
    
    1

5.6.3

released on 2019-08-02

  • 864 All Spring dependencies are updated. This update is forced by security vulnerability issues in

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    36 and

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    37.
  • 860 Fixed

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    38 exception when a getter was inherited both from a superclass and an interface.
  • 774 Added more descriptive message for

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    38 exception.

5.6.2

released on 2019-07-06

  • 826 Fixed bug in SQL JaversRepository when DB schema name was configured. The bug was causing:

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    40.

5.6.1

released on 2019-07-01

  • 855 Fixed bug in

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    14

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    42.

5.6.0

released on 2019-06-13

  • 694 Added possibility in JaVers MongoDB starter to configure a dedicated Mongo database, which is used by Javers. See .
  • 775 Fixed issue: Spring Boot stops when SQL Schema Manager can’t establish the connection.
  • 851 Fixed exception: java.lang.ClassCastException: class org.javers.core.metamodel.property.MissingProperty cannot be cast to class java.util.List.

5.5.2

released on 2019-05-23

  • 842 Fixed bug in query with CommitId on Oracle.

5.5.1

released on 2019-05-18

  • 839 Fixed NPE in

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    43.

5.5.0

released on 2019-05-18

  • Breaking changes in and constructors of all

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    44 subclasses.

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    18 interface is changed from:

    javers:
    snapshotCollectionName: "jv_custom_snapshots"  
    headCollectionName: "jv_custom_head_id"  
    schemaManagementEnabled: false  
    

    2 to:

    javers:
    snapshotCollectionName: "jv_custom_snapshots"  
    headCollectionName: "jv_custom_head_id"  
    schemaManagementEnabled: false  
    

    3

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    44 objects that are produced by comparators now accept

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    47 in constructors, for example:

    javers:
    snapshotCollectionName: "jv_custom_snapshots"  
    headCollectionName: "jv_custom_head_id"  
    schemaManagementEnabled: false  
    
    4
  • 830 & 834 Important new feature in PropertyChange. It gained the new enum, which allows to distinguish between ordinary

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    48 values and the case when a property is added/removed after refactoring:

    javers:
    snapshotCollectionName: "jv_custom_snapshots"  
    headCollectionName: "jv_custom_head_id"  
    schemaManagementEnabled: false  
    

    5 The new enum can be checked using these four new methods in

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    44:

    javers:
    snapshotCollectionName: "jv_custom_snapshots"  
    headCollectionName: "jv_custom_head_id"  
    schemaManagementEnabled: false  
    
    6
  • 837 Fixed bug in SQL

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    50 for Oracle and MS SQL databases.

5.4.0

released on 2019-05-11

  • 625 Composite-Id is now available in JaVers. Multiple properties can be mapped with

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    51, and the

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    52 is constructed as a Map.

  javers:
    snapshotCollectionName: "jv_custom_snapshots"
    headCollectionName: "jv_custom_head_id"
    schemaManagementEnabled: false

7

5.3.6

released on 2019-04-10

  • 820 Fixed NPE in Levenshtein distance diff algorithm.

5.3.5

released on 2019-04-08

  • 821 Added basic support for mapping Entity Id-property as ValueObject.

5.3.4

released on 2019-03-29

  • 815 Fixed

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    53 thrown by

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    54 function.

5.3.3

released on 2019-03-26

  • 798 Fixed error when inferring Javers type of an Id-property as Value.

5.3.2

released on 2019-03-20

  • 810 Fixed issue when comparing Sets with nested Value Objects with

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    55.
  • 806 Fixed bug in schema management on MS SQL Server.

5.3.1

released on 2019-03-16

  • 799 Fixed NPE when passing nulls to

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    56.

5.3.0

released on 2019-03-16

  • 528 Added support for

    @Bean JaversBuilderPlugin javersBuilderPlugin() {

    return builder -> builder  
        .registerValue(BigDecimal.class, new CustomBigDecimalComparator(2));  
    
    }

    9 on Collections and Maps.

5.2.6

released on 2019-03-12

  • 801, 796 Fixed issues when querying for

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    58 on Oracle and MS SQL.

5.2.5

released on 2019-03-10

  • 795 Fixed issue when comparing Sets with nested Value Objects.

5.2.4

released on 2019-02-26

  • 788 Added experimental support for Amazon DocumentDB, a document database compatible with MongoDB.

    If you are using our MongoDB Starter, enable DocumentDB flavour in your

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    46:

  javers:
    snapshotCollectionName: "jv_custom_snapshots"
    headCollectionName: "jv_custom_head_id"
    schemaManagementEnabled: false

8

5.2.2

released on 2019-02-23

  • 789 Fixed “error calling Constructor for CustomType” when CustomPropertyComparator is registered for Value’s parent class.

5.2.0

released on 2019-02-16

  • 751 New aspect annotation Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    97 for triggering

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    29 with each method argument.
  • 784 Fixed bug in handling

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    24.
  • 753 Fixed

    @Bean JaversBuilderPlugin javersBuilderPlugin() {

    return builder -> builder  
        .registerValue(BigDecimal.class, new CustomBigDecimalComparator(2));  
    
    }

    8 after refactoring Entity type to Value type.
  • 769 Fixed NPE in

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    64.
  • 782 Fixes NPE after upgrading Javers to 5.1. NPE was thrown when committing entities created prior to 5.1.

5.1.3

released on 2019-01-25

  • 777 Fixed bug in persisting

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    65 on modern JVM’s where

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    66 has microseconds precision. Removed dependency on

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    67 annotation, which is not available on OpenJDK.

5.1.2

released on 2019-01-07

  • 765 Fixed bug in persisting

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    65 in SQL database.

5.1.0

released on 2018-12-30

  • 743

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    65 added to

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    70:

  javers:
    snapshotCollectionName: "jv_custom_snapshots"
    headCollectionName: "jv_custom_head_id"
    schemaManagementEnabled: false

9

  • 761 Fixed

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    71 when deserializing Snapshots of a refactored class.
  • 762 Fixed Snapshots sorting in MongoRepository when

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    72 is used.

5.0.3

released on 2018-12-23

  • 45 Fixed bug in SQL

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    73 in

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    74 when JaVers’ tables are created in public schema.
  • Added more descriptive message in

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    75 exception.

5.0.1

released on 2018-12-05

  • Fixes for

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    18 combined with

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    77 and

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    29 algorithms.

5.0.0

released on 2018-12-01

  • JaVers’ Spring integration modules are upgraded to be fully compatible with Spring 5.1 and Spring Boot 2.1. If you are using Spring 5.x, it’s recommended to use JaVers 5.x. Otherwise you can fall into dependencies version conflict. Current versions of dependencies:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
                      mongoRepositoryConfiguration()
                              .withSnapshotCollectionName("jv_custom_snapshots")
                              .withHeadCollectionName("jv_custom_head_id")
                              .build())

0

Since now, the last JaVers version compatible with Spring 4 is 3.14.0.

  • 747 Two breaking changes in

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    18. Now, it has to implement

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    80 method, which is used by JaVers to calculate collection-to-collection diff. Return type of

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    81 method is changed to

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    32. See updated .

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
                      mongoRepositoryConfiguration()
                              .withSnapshotCollectionName("jv_custom_snapshots")
                              .withHeadCollectionName("jv_custom_head_id")
                              .build())

1

  • 746 Added default comparator for raw

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    83. Previously, raw

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    83 were ignored by JaVers, now, they are converted to Lists and then compared as Lists.
  • 738 Added

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    85 to support lazy

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    86 from Spring Data MongoDB. The hook is registered automatically in

    @Bean JaversBuilderPlugin javersBuilderPlugin() {

    return builder -> builder  
        .registerValue(BigDecimal.class, new CustomBigDecimalComparator(2));  
    
    }

    6.

3.14.0

released on 2018-11-10

  • All SQL queries are rewritten using the new, faster JaVers SQL framework. Poly JDBC is no longer used for queries (but is still used to schema management). Thanks to that, performance of JaVers commits with SQL repo is significantly better, especially when committing large object graphs.
  • Experimental support for DB2 and DB2400 is discontinued.

3.12.4

released on 2018-10-27

  • 690 Fixed — missing property in *.yml to set SQL database schema name.

3.12.3

released on 2018-10-25

  • 688 Fixed — missing property in *.yml to set CommitIdGenerator.

3.12.1

released on 2018-10-19

  • 724 Fixed issue when deserializing Diff from JSON.

3.12.0

released on 2018-10-19

  • 593 Asynchronous commit:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
                      mongoRepositoryConfiguration()
                              .withSnapshotCollectionName("jv_custom_snapshots")
                              .withHeadCollectionName("jv_custom_head_id")
                              .build())

2

3.11.7

released on 2018-10-11

  • 723 Added possibility to load Snapshots even if user’s class is removed. Prevents JaversException TYPE_NAME_NOT_FOUND.

3.11.6

released on 2018-09-29

  • 712 Fixed issue with auto-audit aspect for JPA CRUD repositories for entities with Id generated by Hibernate (

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    88).

3.11.5

released on 2018-09-19

  • 717 Added index on

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    89 SQL table to speed up queries by Value Object ID.

3.11.4

released on 2018-08-27

  • 705 Dependency update. FastClasspathScanner updated to the latest ClassGraph.

3.11.3

released on 2018-08-22

  • Fixed JaversException PROPERTY_NOT_FOUND reported here.
  • Fixed bugs in Maps and Multimaps serialization.

3.11.2

released on 2018-08-14

  • 697 Fixed issue with Numbers.

3.11.1

released on 2018-08-09

  • 692 Guava issue is finally fixed.

3.11.0

released on 2018-08-04

  • 511 Added handling of property type changes in domain classes. Now JaVers is able to load a Snapshot from JaversRepository, even if property types are different in a current domain class.
  • 692 Fixed bug in javers-core dependencies. Guava is a truly optional dependency.

3.10.2

released on 2018-07-10

  • 687 Additional advices for Spring Data Jpa Aspect.

3.10.1

released on 2018-07-07

  • 682 Fixed JaVers bootstrap error — COMPONENT_NOT_FOUND: JaVers bootstrap error - component of type ‘org.javers.core.CommitIdGenerator’

3.10.0

released on 2018-06-22

  • Stream API for Shadow queries —

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    90. Using

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    91 and

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    92 is the only correct way for paging Shadows (see 658). See the example in ShadowStreamExample.java.

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
                      mongoRepositoryConfiguration()
                              .withSnapshotCollectionName("jv_custom_snapshots")
                              .withHeadCollectionName("jv_custom_head_id")
                              .build())

3

  • 650

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    55 and

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    94 annotations can mixed now in one class. When

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    94 is used in a class, JaVers ignores

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    55 or

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    97 annotations in that class.

3.9.7

released on 2018-05-17

  • 677 Added support for

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    98 from Spring Data 2.x

3.9.6

released on 2018-05-11

  • 676 Fixed NPE when comparing List of Value Objects containing nulls.

3.9.5

released on 2018-05-09

  • 669 Fixed issue with Value Objects stored in Lists and compared using AS_SET algorithm.

3.9.4

released on 2018-05-01

  • 666 Fixed compatibility with Java9 modulepath.

3.9.3

released on 2018-04-26

  • 664 Fixed commidDate persistence in MySql. Column type is changed from

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    99 to

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    00 — milliseconds precision.

3.9.2

released on 2018-04-22

  • 660 Fixed bug in Shadow query runner.

3.9.1

released on 2018-04-19

  • 657 Fixed implementaton of

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    14

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    42. You can use it in distributed applications:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
                      mongoRepositoryConfiguration()
                              .withSnapshotCollectionName("jv_custom_snapshots")
                              .withHeadCollectionName("jv_custom_head_id")
                              .build())

4

3.9.0

released on 2018-04-11

  • New API for processing Changes, convenient for formatting a change log. Now you can group changes by commits and by objects. See Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    15. For example:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
                      mongoRepositoryConfiguration()
                              .withSnapshotCollectionName("jv_custom_snapshots")
                              .withHeadCollectionName("jv_custom_head_id")
                              .build())

5

  • Fixed bug in
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    04, which could cause NPE in some corner cases. Especially, for complex graphs with multiple levels of nested Value Objects.

3.8.5

released on 2018-03-27

  • 648 Mongo driver upgrade to 3.6.3

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
                      mongoRepositoryConfiguration()
                              .withSnapshotCollectionName("jv_custom_snapshots")
                              .withHeadCollectionName("jv_custom_head_id")
                              .build())

6

  • Added support for customizing date formats in the Diff pretty print. See .

3.8.4

released on 2018-03-04

  • 638 Fixed NPE in EdgeBuilder.

3.8.3

released on 2018-03-02

  • 645 Added support for Entity as an Id of another Entity.

3.8.2

released on 2018-02-28

  • 640 Added scanning of gettres declared in interfaces. See this Spec.

3.8.1

released on 2018-02-25

  • 542 Added possibility to disable SQL schema auto creation.

    The flag

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    05 is added to

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    06. The flag is also available in the for SQL.

3.8.0

released on 2018-02-06

  • 616 New annotation —

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    94 — for properties whitelisting. See .

3.7.9

released on 2018-01-14

  • 558 Performance improvement in Hibernate unproxy hook. Now, ShallowReferences can be created without initializing Hibernate proxies.

3.7.8

released on 2018-01-05

  • Marvin Diaz added support for DB2 and DB2400 (beta).
  • Fixed comparing of complex ID values in
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    08. Now their

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    30 is not used.

3.7.7

released on 2017-12-20

  • 596 Fixed NullPointerException when commit property value is null (by Sergey Rozhnov).
  • 519 Added index on Entity typeName in MongoDB.

3.7.6

released on 2017-12-09

  • 614 Custom
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    10 function. Ismael Gomes Costa contributed the method for registering

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    10 function for complex

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    12 used as Entity Id. See javadoc for

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    13.

3.7.5

released on 2017-12-01

  • Shadow queries performance optimization. Less DB queries executed for each Deep+ query.
  • Changes in Shadow Scopes. Now, JaVers always loads child ValueObjects owned by selected Entities. So there is no need to call
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    14. See javadoc for

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    15.
  • Shadow queries execution statistics logger. Enable it:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
                      mongoRepositoryConfiguration()
                              .withSnapshotCollectionName("jv_custom_snapshots")
                              .withHeadCollectionName("jv_custom_head_id")
                              .build())

7

and you will get detailed logs from query execution, for example:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
                      mongoRepositoryConfiguration()
                              .withSnapshotCollectionName("jv_custom_snapshots")
                              .withHeadCollectionName("jv_custom_head_id")
                              .build())

8

Statistics are also available in

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

16 object that you can get from an executed query:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
                      mongoRepositoryConfiguration()
                              .withSnapshotCollectionName("jv_custom_snapshots")
                              .withHeadCollectionName("jv_custom_head_id")
                              .build())

9

3.7.0

released on 2017-11-24

  • 605 Compare Lists as Sets. New List comparing algorithm contributed by drakin. See
  • 601 Fixed bug in the type mapping algorithm. In this case, an Entity with complex inheritance structure was mapped as Value.

3.6.3

released on 2017-11-13

  • Changes in Shadow Scopes. Commit-deep+ is renamed to Deep+. See javadoc for
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    15. Now, deep+ scope doesn’t include commit-deep scope. They are independent scopes.
  • 597 Second fix for MySQL error: Specified key was too long; max key length is 767 bytes.

3.6.2

released on 2017-11-01

  • New
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    18 filter in JQL. Allows selecting snapshots by type:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    19,

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    20,

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    21. See

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    22.
  • Improved exception handling in
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    23 query.

3.6.1

released on 2017-10-29

  • Fix for ValueObject loading in Shadow queries. See .

3.6.0

released on 2017-10-05

  • 431 Auto-audit aspect also on JpaRepository.saveAndFlush().

This task forced a major refactoring.

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

24 module was split into two parts:

  • ` public interface CustomValueComparator<T> { ... /
    • This flag is used to indicate to Javers whether
    • a comparator implementation wants to handle nulls.
    • By default, the flag is false and Javers
    • checks if both values are non-null before calling a comparator.
    • If any of given values is null — Javers compares them using the
    • standard Java logic:
    • * null == null
    • * null != non-null
    • If the flag is true — Javers skips that logic and
    • allows a comparator to handle nulls on its own.
    • In that case, a comparator holds responsibility for null-safety.
    • @see NullAsBlankStringComparator

      */ default boolean handlesNulls() {

      return false;  
      
      } }

      ` 6 with general purpose auto-audit aspect and auto-audit aspect for Spring Data CrudRepository.
  • ` public interface CustomValueComparator<T> { ... /
    • This flag is used to indicate to Javers whether
    • a comparator implementation wants to handle nulls.
    • By default, the flag is false and Javers
    • checks if both values are non-null before calling a comparator.
    • If any of given values is null — Javers compares them using the
    • standard Java logic:
    • * null == null
    • * null != non-null
    • If the flag is true — Javers skips that logic and
    • allows a comparator to handle nulls on its own.
    • In that case, a comparator holds responsibility for null-safety.
    • @see NullAsBlankStringComparator /

      default boolean handlesNulls() {

      return false;  
      
      } }

      7 — a superset of

      public interface CustomValueComparator<T> { ... /*
    • This flag is used to indicate to Javers whether
    • a comparator implementation wants to handle nulls.
    • By default, the flag is false and Javers
    • checks if both values are non-null before calling a comparator.
    • If any of given values is null — Javers compares them using the
    • standard Java logic:
    • * null == null
    • * null != non-null
    • If the flag is true — Javers skips that logic and
    • allows a comparator to handle nulls on its own.
    • In that case, a comparator holds responsibility for null-safety.
    • @see NullAsBlankStringComparator

      */ default boolean handlesNulls() {

      return false;  
      
      } }

      ` 6 — with JPA & Hibernate integration, so: auto-audit aspect for Spring Data JpaRepository, HibernateUnproxyObjectAccessHook, JpaHibernateConnectionProvider, and JaversTransactionalDecorator.

If you are using JaVers with MongoDB, you don’t need to change anything.

If you are using JaVers with SQL but without Spring Boot, you need to change the

public interface CustomValueComparator<T> {
  ...
  /**
  • This flag is used to indicate to Javers whether
  • a comparator implementation wants to handle nulls. *
  • By default, the flag is false and Javers
  • checks if both values are non-null before calling a comparator.
  • If any of given values is null — Javers compares them using the
  • standard Java logic:
  • * null == null
  • null != non-null
  • If the flag is true — Javers skips that logic and
  • allows a comparator to handle nulls on its own.
  • In that case, a comparator holds responsibility for null-safety. *
  • @see NullAsBlankStringComparator */ default boolean handlesNulls() { return false; } }

6 dependency to

public interface CustomValueComparator<T> {
  ...
  /**
  • This flag is used to indicate to Javers whether
  • a comparator implementation wants to handle nulls. *
  • By default, the flag is false and Javers
  • checks if both values are non-null before calling a comparator.
  • If any of given values is null — Javers compares them using the
  • standard Java logic:
  • * null == null
  • null != non-null
  • If the flag is true — Javers skips that logic and
  • allows a comparator to handle nulls on its own.
  • In that case, a comparator holds responsibility for null-safety. *
  • @see NullAsBlankStringComparator */ default boolean handlesNulls() { return false; } }

7. If you are using Spring Boot with our starter (

springVersion           =5.3.10
springBootVersion       =2.5.5
springDataCommonsVersion=2.5.5
springDataMongoVersion  =3.2.5
springSecurityVersion   =5.5.2
mongoDbDriverVersion    =4.2.3
hibernateVersion        =5.4.32.Final
guavaVersion            =31.0-jre
gsonVersion             =2.8.8
classgraphVersion       =4.8.128

0), you don’t need to change anything. Our starters always provide the right configuration.

3.5.2

released on 2017-10-05

  • 574 Added missing support for
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    31 in Shadows.

3.5.1

released on 2017-09-24

  • Dependencies versions update:

springVersion           =5.3.24
springBootVersion       =2.7.7
springDataCommonsVersion=2.7.6
springDataMongoVersion  =3.4.6
springSecurityVersion   =5.7.6
mongoDbDriverVersion    =4.6.1
hibernateVersion        =5.6.14.Final
guavaVersion            =31.0-jre
gsonVersion             =2.9.0
classgraphVersion       =4.8.128

0

3.5.0

released on 2017-07-30

  • 568 Added the new scope for Shadow queries — commit-depth+. In this scope, JaVers tries to restore an original object graph with (possibly) all object references resolved. See .

3.3.5

released on 2017-07-14

  • 565 Fixed error when executing query byInstance with HibernateUnproxyObjectAccessHook.

3.3.4

released on 2017-07-04

  • 560 Fixed NPE when getting empty list of Shadows.

3.3.3

released on 2017-06-29

  • 548 Added support for classes generated by Google @AutoValue.

3.3.2

released on 2017-06-25

  • 546 Arrays on Value position are now compared using
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    32.

3.3.1

released on 2017-06-25

  • 497 Fix in PolyJDBC for MsSql, deprecated
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    33 column type changed to

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    34

3.3.0

released on 2017-06-21 at Devoxx PL, Cracow

  • Added possibility to register a Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    13 function for comparing ValueTypes (it works also for Values stored in Lists, Arrays and Maps). Solved issues: 492, 531.

For example, BigDecimals are (by default) ValueTypes compared using

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

36. Now, you can compare them in the smarter way, ignoring trailing zeros:

springVersion           =5.3.24
springBootVersion       =2.7.7
springDataCommonsVersion=2.7.6
springDataMongoVersion  =3.4.6
springSecurityVersion   =5.7.6
mongoDbDriverVersion    =4.6.1
hibernateVersion        =5.6.14.Final
guavaVersion            =31.0-jre
gsonVersion             =2.9.0
classgraphVersion       =4.8.128

1

3.2.1

released on 2017-06-12

  • 32 Fix in PolyJDBC for MySql INSERTS with autoincrement.

3.2.0

released on 2017-05-26

  • 133 New JQL queries — Shadows. See .
  • 455 Fixed error in schema creation on MySQL database with non UTF-8 encoding — MySQL error: Specified key was too long; max key length is 767 bytes

3.1.1

released on 2017-05-07

  • 532 Added the method to clear sequence allocation in PolyJDBC. See JaversSqlRepositoryevictSequenceAllocationCache().
  • 539 Added annotation priorities. Now, Javers’ annotations have priority over JPA annotations.

3.1.0

released on 2017-03-27

  • 403 Added
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    31 annotation. Now, property names can be customized which means easier domain classes refactoring.
  • 27 Fixed resource leak in PolyJDBC.

3.0.5

released on 2017-03-24

  • 524 Fixed version conflict between Hibernate and Spring Boot. Hibernate version downgraded to 5.0.11.Final

3.0.4

released on 2017-03-14

  • 505 Empty commits (with zero snapshots) are no longer persisted.

3.0.3

released on 2017-03-05

  • 507 BigInteger added to the list of well known Value types.

3.0.2

released on 2017-03-02

  • 501 Fixed exception (Don’t know how to extract Class from type) for complex class hierarchies with generic type variables.
  • 499 Fixed problem with hash collision for some method names.

3.0.0 — Java 8 release

released on 2017-02-01

We rewrote whole JaVers’ code base from Java 7 to 8. Now, JaVers is lighter, faster, and more friendly for Java 8 users.

Breaking changes

  • All javers-core classes like:
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    38,

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    39, or

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    40 now use standard Java 8 types

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    41 and

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    42.
  • The old good Joda Time is no longer used in javers-core but still supported in users’ objects.
  • JaVers’ Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    
    32 is removed.
  • All
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    44 methods in public API are removed.
  • Since 3.0, JaVers is not runnable on Java 7 Runtime. If you still use Java 7, stay with version, which will be maintained for a while, but only for bug fixing.

Misc

  • All JaVers’ dependencies are bumped to the latest versions:

springVersion           =5.3.24
springBootVersion       =2.7.7
springDataCommonsVersion=2.7.6
springDataMongoVersion  =3.4.6
springSecurityVersion   =5.7.6
mongoDbDriverVersion    =4.6.1
hibernateVersion        =5.6.14.Final
guavaVersion            =31.0-jre
gsonVersion             =2.9.0
classgraphVersion       =4.8.128

2

  • SQL Repository schema migration scripts for JaVers 1.x are removed. Upgrade from JaVers 1.x to 3.0 is still possible, but first run 2.9.x to perform overdue SQL Repository schema migration.

3.0.0-RC

released on 2017-01-28

2.9.2 — the last version runnable on Java 7 Runtime

released on 2017-01-25

  • 494 Fixed bug in MongoRepository introduced in 2.9.1 (IllegalArgumentException for Boolean JsonPrimitive).

2.9.1

released on 2017-01-17

  • 489 MongoRepository performance optimization.

2.9.0

released on 2017-01-14

  • 132 Implemented support for Guava’s Multiset and Multimap.

2.8.2

released on 2017-01-03

  • 485 Fixed MySQLSyntaxErrorException: Specified key was too long; max key length is 767 bytes when creating indexes on MySQL.

2.8.1

released on 2016-12-13

  • 475 Fixed concurrency issue in SQL sequence generator resulting in SequenceLimitReachedException: [SEQUENCE_LIMIT_REACHED]

2.8.0

released on 2016-12-09

  • 476 Added support in

    ` public interface CustomValueComparator<T> { ... /
    • This flag is used to indicate to Javers whether
    • a comparator implementation wants to handle nulls.
    • By default, the flag is false and Javers
    • checks if both values are non-null before calling a comparator.
    • If any of given values is null — Javers compares them using the
    • standard Java logic:
    • * null == null
    • * null != non-null
    • If the flag is true — Javers skips that logic and
    • allows a comparator to handle nulls on its own.
    • In that case, a comparator holds responsibility for null-safety.
    • @see NullAsBlankStringComparator

      */ default boolean handlesNulls() {

      return false;  
      
      } }

      6 for multiple Spring Transaction Managers. Since now,

        MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
                mongoRepositoryConfiguration()  
                        .withSchemaManagementEnabled(false)  
                        .build())  
      

      46 bean should be explicitly provided when configuring

        MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
                mongoRepositoryConfiguration()  
                        .withSchemaManagementEnabled(false)  
                        .build())  
      
      ` 47 bean:

springVersion           =5.3.24
springBootVersion       =2.7.7
springDataCommonsVersion=2.7.6
springDataMongoVersion  =3.4.6
springSecurityVersion   =5.7.6
mongoDbDriverVersion    =4.6.1
hibernateVersion        =5.6.14.Final
guavaVersion            =31.0-jre
gsonVersion             =2.9.0
classgraphVersion       =4.8.128

3

See full example of .

  • 461 Fix for

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    30 excepting throw from

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    49 aspect when deleted object not exists in JaversRepository.

2.7.2

released on 2016-11-29

  • 467 Fixed bug in GlobalId PK cache in SQl Repository. Now, when Spring Transaction Manager rolls back a transaction, the cache is automatically evicted.

  • 462 Fixed problem with commit property column size in SQL databases. Max length increased from 200 to 600 characters.

2.7.1

released on 2016-11-17

  • 457 Fixed problem with Bean Mapping Style due to Type Erasure.

2.7.0

released on 2016-11-10

  • 452 New

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    50 annotation, see .

2.6.0

released on 2016-10-30

  • 411 New commitId generator for distributed applications. Now you can use cluster-friendly

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    51, see

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    52
  • 209 Added multi-class query —

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    53.
  • 435 Added flags for deactivating auto-audit aspects in Spring Boot starters.

springVersion           =5.3.24
springBootVersion       =2.7.7
springDataCommonsVersion=2.7.6
springDataMongoVersion  =3.4.6
springSecurityVersion   =5.7.6
mongoDbDriverVersion    =4.6.1
hibernateVersion        =5.6.14.Final
guavaVersion            =31.0-jre
gsonVersion             =2.9.0
classgraphVersion       =4.8.128

4

2.5.0

released on 2016-10-26

  • 412

    @Bean JaversBuilderPlugin javersBuilderPlugin() {

    return builder -> builder  
        .registerValue(BigDecimal.class, new CustomBigDecimalComparator(2));  
    
    }

    9 annotation can now be used for properties.
  • Empty snapshots for

    @Bean JaversBuilderPlugin javersBuilderPlugin() {

    return builder -> builder  
        .registerValue(BigDecimal.class, new CustomBigDecimalComparator(2));  
    
    }

    9 Entities are no longer created.
  • 443 Fix for Gson stackoverflow exception when using complex Value types (with circular references).

2.4.1

released on 2016-10-18

  • 441 UUID added to list of well known ValueTypes.

2.4.0

released on 2016-10-12

  • 398 Ian Agius contributed a schema support for SQL databases.

2.3.0

released on 2016-09-21

  • 263

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    02 annotation scanner implemented. Now you can easily register your classes with the

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    02 annotation in order to use them in all kinds of JQL queries (without getting TYPE_NAME_NOT_FOUND exception). See

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    58.

2.2.2

released on 2016-09-09

  • 430 Added

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    59 on javers bean.

2.2.1

released on 2016-09-06

  • 417 Fixed dependency management in

    ` public interface CustomValueComparator<T> { ... /
    • This flag is used to indicate to Javers whether
    • a comparator implementation wants to handle nulls.
    • By default, the flag is false and Javers
    • checks if both values are non-null before calling a comparator.
    • If any of given values is null — Javers compares them using the
    • standard Java logic:
    • * null == null
    • * null != non-null
    • If the flag is true — Javers skips that logic and
    • allows a comparator to handle nulls on its own.
    • In that case, a comparator holds responsibility for null-safety.
    • @see NullAsBlankStringComparator

      */ default boolean handlesNulls() {

      return false;  
      
      } }

      6. Now

        MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
                mongoRepositoryConfiguration()  
                        .withSchemaManagementEnabled(false)  
                        .build())  
      

      61 dependency is optional and should be on an application’s classpath only when you are using the

        MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
                mongoRepositoryConfiguration()  
                        .withSchemaManagementEnabled(false)  
                        .build())  
      

      49 annotation. The aspect class

        MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
                mongoRepositoryConfiguration()  
                        .withSchemaManagementEnabled(false)  
                        .build())  
      

      63 was removed and split into two aspects:

        MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
                mongoRepositoryConfiguration()  
                        .withSchemaManagementEnabled(false)  
                        .build())  
      

      64 and

        MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
                mongoRepositoryConfiguration()  
                        .withSchemaManagementEnabled(false)  
                        .build())  
      
      `
  • First one should be enabled when you are using

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    66. Second one should be enabled when you are using

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
  • If you are using

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    68, both aspects are enabled by default so you don’t have to change anything. See .
  • 425 Fixed some bugs in ShallowReference type handling.

2.1.2

released on 2016-08-28

  • 416 Added map key dot replacement in MongoRepository.

  • 415 Key in

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    69 changed from

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    70 to

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    71.

2.1.1

released on 2016-07-30

  • 395 Spring Boot version bumped to 1.4.0-RELEASE, fixed MongoDB Driver version conflict between JaVers and spring-data-mongodb.

2.1.0

released on 2016-07-28

  • 220 New aggregate filter in JQL. Now child ValueObjects can be selected when querying for Entity changes. See .

  • 408 Added equals() and hashCode() in ContainerElementChange and EntryChange classes.

2.0.4

released on 2016-07-23

  • 407 Fixed bug that causes PropertyChange.equals() to always return false.

  • 394 Error message enhancement.

2.0.3

released on 2016-06-29

  • 396 Fixed javers-spring integration problem: cannot access its superclass org.javers.spring.jpa.JaversTransactionalDecorator.

2.0.2

released on 2016-06-17

  • 388 Fixed ORA-00972 when creating the JaVers schema in Oracle 12c

2.0.1

released on 2016-06-15

  • 384 Value-based equals() and hashCode() implemented in concrete Change types

  • 380 Fixed CLASS_EXTRACTION_ERROR for non-concrete array types (like T[])

2.0.0

released on 2016-06-09

JaVers 2.0 comes with major improvements and new features in JQL.

Unified semantics of changes and snapshot queries In JaVers 2.0, change queries work in the same way as snapshot queries and change queries accept all filters.

For example, in JaVers 1.x, this change query:

springVersion           =5.3.24
springBootVersion       =2.7.7
springDataCommonsVersion=2.7.6
springDataMongoVersion  =3.4.6
springSecurityVersion   =5.7.6
mongoDbDriverVersion    =4.6.1
hibernateVersion        =5.6.14.Final
guavaVersion            =31.0-jre
gsonVersion             =2.9.0
classgraphVersion       =4.8.128

5

returns empty list, which is not very useful.

In JaVers 2.0 this query returns changes introduced by the selected snapshot, so changes between versions 4 and 5 of a given object.

JaVers implements change queries on the top of snapshot queries. Change sets are recalculated as a difference between subsequent pairs of snapshots fetched from a JaversRepository. In 1.x, only explicitly selected snapshots are involved in the recalculation algorithm. In 2.0, for each snapshot selected by a user query, JaVers implicitly fetches previous snapshot (if needed). Thanks to that, change queries are far more useful and they work as you could expect.

New features

  • New query for any domain object. See .
  • 334 New JQL

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    72 filter. See .
  • 305 New JQL

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    73 filter. See .
  • 375 Added support for commit properties in auto-audit aspect. See .

SQL Schema migration

JaVers 2.0 comes with the new database schema for SQL repository:

  • table
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    74 is no longer used
  • new column
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    75
  • new column
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    76
  • new table
      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    77

JaVers automatically launches a data migration script when old schema is detected. Data from

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

74 are copied to new columns (

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

75 and

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

76). It should take a few seconds for medium size tables but for very large tables it could be time consuming.

Breaking changes The only one breaking change is new semantics of changes query which is actually an improvement.

If you are using SQL repository, and your

springVersion           =6.0.3
springBootVersion       =3.1.0
springDataCommonsVersion=3.0.0
springDataMongoVersion  =4.0.0
springSecurityVersion   =6.0.1
mongoDbDriverVersion    =4.9.1
hibernateVersion        =6.1.6.Final
guavaVersion            =32.0.1-jre
gsonVersion             =2.10
classgraphVersion       =4.8.154

31 table is large (millions of records), run JaVers 2.0 on your test environment for the first time and check if data migrations is done correctly.

1.6.7

released on 2016-05-06

  • 368 Improvements in Spring Boot starters.

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    82 bean is created by default when SpringSecurity is detected on classpath.

1.6.4

released on 2016-04-26

  • 362 Default behaviour for non-parametrized Collections instead of throwing JaversException: GENERIC_TYPE_NOT_PARAMETRIZED.

1.6.3

released on 2016-04-17

  • 361 Fixed bug in schema migration for MsSql Server.

1.6.2

released on 2016-04-13

  • 355 Fixed exception handling in JaversAuditableRepositoryAspect.

  • 216 JQL - added basic support for nested ValuObjects queries.

1.6.1

released on 2016-04-12

  • 353 Fixed misleading error message for raw Collections fields.

  • 18 Fixed resource leak in PolyJDBC, resulting in ORA-01000: maximum open cursors exceeded (Oracle).

1.6.0

released on 2016-03-16

  • 191 Added support for sets of ValueObjects, SET_OF_VO_DIFF_NOT_IMPLEMENTED exception should not appear anymore.

1.5.1

released on 2016-03-04

  • 344 Fixed bug in Spring Boot starter for SQL. Dialect autodetection now works properly.

1.5.0

released on 2016-02-28

  • New JaVers Spring Boot starter for SQL and Spring Data —

    springVersion =5.3.10 springBootVersion =2.5.5 springDataCommonsVersion=2.5.5 springDataMongoVersion =3.2.5 springSecurityVersion =5.5.2 mongoDbDriverVersion =4.2.3 hibernateVersion =5.4.32.Final guavaVersion =31.0-jre gsonVersion =2.8.8 classgraphVersion =4.8.128

    0. See Spring Boot integration.
  • Starting from this version we use SemVer scheme for JaVers version numbers.

1.4.12

released on 2016-02-25

  • 341 Fixed bug TyeMapper — infinite loop for certain Type cycles in user classes.

1.4.11

released on 2016-02-12

  • 333 GroovyObjects support. Now JaVers can be used in Groovy applications. See .

  • springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    55 can be used on class level (for example, GroovyObjects support is implemented by ignoring all properties with

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    85 type). See .
  • 211 New annotation

    @Bean JaversBuilderPlugin javersBuilderPlugin() {

    return builder -> builder  
        .registerValue(BigDecimal.class, new CustomBigDecimalComparator(2));  
    
    }

    9 added. It can be used as the less radical alternative to

    springVersion =6.0.3 springBootVersion =3.1.0 springDataCommonsVersion=3.0.0 springDataMongoVersion =4.0.0 springSecurityVersion =6.0.1 mongoDbDriverVersion =4.9.1 hibernateVersion =6.1.6.Final guavaVersion =32.0.1-jre gsonVersion =2.10 classgraphVersion =4.8.154

    55. See .

1.4.10

released on 2016-02-02

  • 325 Fixed bug in persisting commitDate in SQL repository.

  • 249 Fixed bug in JSON deserialization of Id property with Type tokens.

  • 192 Added support for well-known Java util types:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    88,

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    89 and

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    90.
  • 16 Fixed bug in PolyJDBC sequence generating algorithm.

1.4.7

released on 2016-01-29

  • 322 New JQL

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    91 filter for snapshot queries. See .

1.4.5

released on 2016-01-25

  • 309 New JQL

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    92 filter for snapshot queries. See .

1.4.4

released on 2016-01-20

  • 286 New properties in

    Javers javers = javers().registerEntity(
        EntityDefinitionBuilder.entityDefinition(MyEntity.class)  
                .withShallowProperties(["myShallowProperty"])  
                .build())  
        .build()  
    

    59:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    

    94 and

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),  
              mongoRepositoryConfiguration()  
                      .withSchemaManagementEnabled(false)  
                      .build())  
    
    95.

294 Added version number to Snapshot metadata:

      MongoRepository mongoRepository = new MongoRepository(getMongoDb(),
              mongoRepositoryConfiguration()
                      .withSchemaManagementEnabled(false)
                      .build())

96.

Warning!

All snapshots persisted in JaversRepository before release 1.4.4 have version 0. If it isn’t OK for you, run DB update manually.