Skip to content

Releases: aether-framework/aether-generators

🚀 Aether Generators v1.1.2 – Compile‑safety & predictable relation traversal

02 Sep 14:20

Choose a tag to compare

🚀 Aether Generators v1.1.2 – Compile‑safety & predictable relation traversal

Warning

After this release there was a bug that needed to be fixed before deployment.
To avoid compile errors we changed the version of the Auto-Services library that has been changed on bumping back to 1.1.1

This patch release fixes a compile‑time break in generated MVC builders and clarifies traversal semantics for relation pre‑persistence. It is a drop‑in update over 1.1.1.

✨ Highlights in 1.1.2

  • Fix (codegen): Unique local names per relation in generated prePersistRelations(..) (e.g., rel_<field>, col_<field>). Prevents duplicate‑identifier compilation errors when an entity has multiple relations.
  • Traversal semantics: Cycle guard lives in ensurePersistent(..) (identity‑based), while prePersistRelations(..) purely walks relations. This removes premature early‑returns and keeps traversal predictable.
  • Depth limit confirmed: Strict enforcement of REL_DEPTH_LIMIT — relations beyond the limit are not traversed, keeping pre‑persist bounded and deterministic.
  • Test suite hardening: Builder‑first integration tests (no raw new) for depth‑limited traversal, cyclic graphs, and collection APIs (add*, addAll*, clear*).

📦 Installation

Tip

Use the BOM and just bump to 1.1.2. No additional repositories required.

Maven (BOM + modules)

<!-- pom.xml -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>de.splatgames.aether</groupId>
            <artifactId>aether-generators-bom</artifactId>
            <version>1.1.2</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <!-- MVC builders (annotations + runtime) -->
    <dependency>
        <groupId>de.splatgames.aether</groupId>
        <artifactId>aether-generators-mvc-annotations</artifactId>
    </dependency>
    <dependency>
        <groupId>de.splatgames.aether</groupId>
        <artifactId>aether-generators-mvc-runtime</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <annotationProcessorPaths>
                    <path>
                        <groupId>de.splatgames.aether</groupId>
                        <artifactId>aether-generators-mvc-processor</artifactId>
                        <version>1.1.2</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

Gradle (BOM + modules)

dependencies {
    implementation platform('de.splatgames.aether:aether-generators-bom:1.1.2')

    // MVC builders
    implementation 'de.splatgames.aether:aether-generators-mvc-annotations'
    implementation 'de.splatgames.aether:aether-generators-mvc-runtime'
    annotationProcessor 'de.splatgames.aether:aether-generators-mvc-processor:1.1.2'
}

🛠️ Upgrade Notes

  • No breaking changes.
  • Generated builders get safer local naming in relation traversal; you do not need to regenerate code manually — recompile is sufficient.
  • If you rely on test assertions around depth/graph traversal, verify them against the strict REL_DEPTH_LIMIT behavior.

📝 Changelog

Bug Fixes

  • Prevent duplicate local variables in generated prePersistRelations(..) causing compile errors on entities with multiple relations.
  • Keep cycle detection in ensurePersistent(..) only (identity‑based), avoiding premature termination of traversal.
  • Confirmed strict enforcement of REL_DEPTH_LIMIT; updated tests to assert only reachable relations are persisted.

📜 License

MIT License. See LICENSE for details and NOTICE for third‑party attributions.

🚀 Aether Generators v1.1.1 – Stable relation handling for MVC builders

01 Sep 19:48

Choose a tag to compare

🚀 Aether Generators v1.1.1 – Stable relation handling for MVC builders

This patch release focuses on fixing relation persistence in the MVC builders and tightening the generated runtime helpers. It is a drop‑in update over 1.1.0.

✨ Highlights in 1.1.1

  • Fix (MVC builders): Prevents TransientObjectException when persisting entities that reference transient related objects (to-one and to-many). Builders now pre‑persist related objects in persistent() mode and replace associations with managed instances.
  • Cycle safety: Identity-based cycle guard to avoid infinite traversal in cyclic graphs (e.g., mutual supervision).
  • Deterministic traversal: Bounded depth for relation pre‑persistence to keep operations predictable.
  • Robust ID wiring: writeId(..) prefers setId(..) if available and otherwise falls back to the id field; getFieldValue(..) is getter-first, then reflective.
  • Reflection safety: Hierarchical field lookup (walks superclasses) and no hard failures for inaccessible fields.

📦 Installation

Tip

Use the BOM and just bump to 1.1.1. No additional repositories required.

Maven (BOM + modules)

<!-- pom.xml -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>de.splatgames.aether</groupId>
            <artifactId>aether-generators-bom</artifactId>
            <version>1.1.1</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <!-- Example: DTO annotations (keep as needed for your setup) -->
    <dependency>
        <groupId>de.splatgames.aether</groupId>
        <artifactId>aether-generators-dto-annotations</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <annotationProcessorPaths>
                    <!-- Example: DTO processor. Include other processors you use. -->
                    <path>
                        <groupId>de.splatgames.aether</groupId>
                        <artifactId>aether-generators-dto-processor</artifactId>
                        <version>1.1.1</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

Gradle (BOM + modules)

dependencies {
    implementation platform('de.splatgames.aether:aether-generators-bom:1.1.1')

    // Example: DTO annotations & processor. Add/adjust modules as in your project.
    implementation 'de.splatgames.aether:aether-generators-dto-annotations'
    annotationProcessor 'de.splatgames.aether:aether-generators-dto-processor:1.1.1'
}

🛠️ Upgrade Notes

  • No breaking changes.
  • If you use the MVC builders in persistent() mode, this update removes the need for manual pre‑persisting of related entities.
  • Just bump your BOM/processor version to 1.1.1.

📝 Changelog

Bug Fixes

  • Fixed org.hibernate.TransientObjectException by ensuring related entities are pre‑persisted and replaced with managed instances before saving the root entity (to‑one and to‑many).
  • Resolved edge cases in reflection utilities: getter‑first reads, superclass field lookup, and safer ID assignment (setId(..)id field fallback).

Enhancements

  • Added identity-based cycle guard and bounded traversal depth for predictable relation handling.
  • Minor cleanup and internal docs around relation traversal and persistence adapter integration.

📜 License

MIT License. See LICENSE for details and NOTICE for third‑party attributions.

🚀 Aether Generators v1.1.0 – Improved Code Generation with JavaPoet

01 Sep 13:58

Choose a tag to compare

🚀 Aether Generators v1.1.0 – Improved Code Generation with JavaPoet

This release focuses on a refactored, more maintainable DTO generator with deterministic output and clearer diagnostics. It is a drop‑in upgrade for users of the 1.0.x line.

✨ Highlights in 1.1.0:

  • Refactored: Processor code modularized into struct and utils packages
  • Stability: Deterministic serialVersionUID generation via SHA‑256 hashing
  • Ordering: Stable field ordering by @Dto(order) with declaration order as tiebreaker
  • Annotation mirroring: Copies all field annotations from the source (excluding @Dto)
  • DTO quality: Consistent toString(), equals(), and hashCode()
  • Docs: Generated Javadoc references original fields; internal Javadocs added across the processor
  • Convenience: Trailing block comment with change(..) / build(..) examples appended to each DTO

📦 Installation

Tip

🎉 All Aether products are available on Maven Central – no extra repository required!

Maven (BOM + modules)

<!-- pom.xml -->
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>de.splatgames.aether</groupId>
            <artifactId>aether-generators-bom</artifactId>
            <version>1.1.0</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

<dependencies>
    <!-- DTO generator modules -->
    <dependency>
        <groupId>de.splatgames.aether</groupId>
        <artifactId>aether-generators-dto-annotations</artifactId>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <annotationProcessorPaths>
                    <path>
                        <groupId>de.splatgames.aether</groupId>
                        <artifactId>aether-generators-dto-processor</artifactId>
                        <version>1.1.0</version>
                    </path>
                </annotationProcessorPaths>
            </configuration>
        </plugin>
    </plugins>
</build>

Gradle (BOM + modules)

dependencies {
    implementation platform('de.splatgames.aether:aether-generators-bom:1.1.0')
    implementation 'de.splatgames.aether:aether-generators-dto-annotations'
    annotationProcessor 'de.splatgames.aether:aether-generators-dto-processor:1.1.0'
}

🛠️ Upgrade Notes

  • No breaking API changes in generated DTOs.
  • If you pinned 1.0.x in your annotation processor paths, update to 1.1.0.
  • The 1.0.x line is considered legacy; use 1.1.0 for continued improvements.

📝 Changelog

Enhancements

  • Modularized processor code into struct and utils packages.
  • Deterministic serialVersionUID computation for DTOs.
  • Stable field ordering by order, with declaration order as a secondary key.
  • Copied source field annotations to DTO fields (excluding @Dto).
  • Appended recommended change(..) and build(..) methods as a trailing comment in each DTO.
  • Added comprehensive internal Javadocs and clearer compiler diagnostics.

Bug Fixes

  • Fixed missing semicolon in generated toString() methods.
  • Corrected declaration index handling for consistent ordering.

📜 License

This project is licensed under the MIT License. See LICENSE for details and NOTICE for third‑party attributions.