All Versions
Latest Version
Avg Release Cycle
54 days
Latest Release
1 day ago

Changelog History
Page 1

  • v2.8.1

    October 19, 2019

    πŸš€ Immutables team is happy to announce Immutables 2.8.1 release.

    πŸ›  This release 2.8.1 comes one month after 2.8.0 and contains several improvements, bugfixes and new functionalities.

    Notable changes


    • πŸ‘€ Generate criteria DSL from existing JavaBeans(spec) classes. Useful for projects which use JavaBeans for legacy reasons or not yet fully migrated to immutables. See #1103
    • πŸ”Œ Pluggable ID resolution. Introduce IdResolver interface to allow users to provide their own annotations (or logic) for ID attribute selection. It complements default @Criteria.Id annotation.
    • πŸŽ‰ Initial support for partial updates. Allow partial changes to be applied directly by the backend (if supported).

      repository.update( .set(, "Changed Name") .set(person.age, 33) .execute()

    • πŸ‘Œ Support top-level count() operation similar to COUNT(*) in SQL

      repository.findAll().count(); repository.find(person.age.greaterThan(33)).count();

    • βž• Add upsert / update operations on entity in Writable interface

    Mongo jackson adapter

    • πŸ‘Œ Support BSON undefined type which is converted to java null (9a64881)
    • πŸ‘Œ Support BSON binary data (76fb7b44)
    • 🐎 Lazily read values from bson stream (1c07466). Potentially a performance improvement since values don't have to be deserialized unless required by deserializer. Allows faster skipChildren() calls.
    • πŸ‘‰ Make BsonGenerator null safe on strings and numbers (ba78d7)

    Mongo repositories

    πŸ”„ Changes related to mongo repositories (predecessor to criteria).

    • Enable _id initialization in MongoDB (#1074). PR from AndrΓ© RouΓ©l
    • πŸ‘ bson4gson adapter. Support BSON undefined type translated to java null
    • bson4gson adapter. Friendlier type conversion between BSON temporal types and java numbers (int / long etc.)
    • bson4gson adapter. Fix peek() method in JsonReader (6f1247)
    • Require Java 8


    • πŸ‘Œ Support lazy hashing via lazyhash attribute. Contrary to existing prehash, lazyhash would compute hashcode on first access to hashCode() method.
    • πŸ”„ Changed how META-INF/annotations/org.immutables.value.immutable is read - disabled URLConnection caching. PR-1060 from Canay Γ–ZEL
    • 0️⃣ Set optBits for Modifiable, Default maps. PR-1086 from Dylan Wragge

    ⬆️ Third party library upgrades and other dependencies

    • Jackson databind -> (9ea18)
    • πŸ”€ Mongo java (sync) driver 3.10.1 -> 3.11.0 (33f98d4)
    • Mongo reactive streams 1.11 -> 1.12 (fed2e07)
    • rxjava2 2.2.10 -> 2.2.12 (c6e06ce)
    • ErrorProne 2.3.2 -> 2.3.3 (b62fab4f)
    • βœ‚ Remove utility maven module (1089). All modules will declare dependencies explicitly.

    Thanks to all contributors. In no particular order:

  • v2.8.0

    September 20, 2019

    πŸ›  (not a bugfix release yet, sorry, expect more bugfixes in 2.8.x versions)

    2.8.0 is available on Maven Central now

    Criteria & Repositories API

    Combine power of immutable objects with the flexibility of querying them

    πŸš€ Immutables team is pleased to announce Immutables 2.8.0 release.

    πŸš€ Major focus of this release was Criteria API which enables
    πŸ‘‰ users to generate model-specific query DSL. Generated class (along with criteria runtime) allows accessing different backends in a unified, fluent and type-safe manner.

    Benefits over raw driver API usage or string based abstractions (DSLs) are:

    1. Compile-time checking and type safety allows for much fewer mistakes
    2. IDE auto-completion guides through the choice of fields and operators
    3. Best in class readability due to drastically reduced number of parentheses and specially designed DNF approach ♻️ 4. Easier model refactoring

    Benefits over existing frameworks like Spring Data, Morphia, QueryDSL or jOOQ are:

    1. Derive immutable implementation, query DSL, repository and more from a single definition πŸ”€ 2. Pluggable Sync / Async / Reactive execution models
    2. Pluggable backend implementations πŸ“„ 4. Generated or custom Repositories (aka DAOs) can be controlled to generate reading / writing or watching operations on entities

    πŸš€ Full release announcement here:
    Getting started with criteria API:

  • v2.7.5

    January 14, 2019
  • v2.7.4

    December 25, 2018
    • πŸ›  Bugfix and refinements release! Thank you issue reports and PRs!
    • Notable stuff
      • Propagate checked exceptions in throws for lazy attributes (only for @Value.Lazy)
    • Issues 2.7.4
  • v2.7.3

    November 11, 2018
    • πŸ”€ Important fix for Modifiables/Immutables/from (aka mergeFrom) methods broken in 2.7.2
    • Issues #863 #864
  • v2.7.2

    November 05, 2018
    • πŸ›  Many fixes and corrections! Thank you issue reports and PRs!
    • Issues 2.7.2
    • Notable stuff
      • Experimental support for Codecs and Jackson (along with Gson) for mapping to MongoDB repositories (#850, #817 by @asereda-gs)
      • Style.optionalAcceptNullable=true now also generates alternative constructor accepting nullable input for java.util.Optional attributes (#843 by @ThLeu)
      • org.immutables.value.Generated now covers generated nested classes (#854 by @before)
  • v2.7.1

    August 25, 2018
    • Thank you issue reports and PRs! Not many features here, but minor version increment was needed
    • Notable stuff
      • Added org.immutables:value-annotations annotation only jar. Previously we had equivalent artifact org.immutables:value:annotations (classifier annotations). Apparently some tools have trouble with properly addressing jars with classifiers and attached sources. Both artifacts are released.
      • org.immutables.value.Generated annotation (which auto added to generated classes / builders) is class-retention annotation now. Some tools (like osgi related) will not automatically add such annotation as runtime dependency.
      • Automatic-Module-Name now have no dashes for org.immutables.value.annotations (annotation only) and org.immutables.value.processor (unshaded processor). Most used artifact/module org.immutables.value is obviously unchanged.
      • Can suppress a bit finer categories of warnings @Suppression("immutables:subtype"), each warning message now contain such token in parentheses.
      • Subtyping value type with another value type directly is now a warning, not an error. It's still better avoid it.
    • Issues 2.7.1
  • v2.7.0

    August 23, 2018
  • v2.6.2

    July 20, 2018