Releases: aether-framework/aether-generators
🚀 Aether Generators v1.1.2 – Compile‑safety & predictable relation traversal
🚀 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), whileprePersistRelations(..)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_LIMITbehavior.
📝 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
🚀 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
TransientObjectExceptionwhen 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(..)preferssetId(..)if available and otherwise falls back to theidfield;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.TransientObjectExceptionby 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(..)→idfield 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
🚀 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
structandutilspackages - ✅ Stability: Deterministic
serialVersionUIDgeneration 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(), andhashCode() - ✅ 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.xin your annotation processor paths, update to1.1.0. - The 1.0.x line is considered legacy; use 1.1.0 for continued improvements.
📝 Changelog
Enhancements
- Modularized processor code into
structandutilspackages. - Deterministic
serialVersionUIDcomputation 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(..)andbuild(..)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.