New in the 0.4.0-SNAPSHOT development line — everything listed here landed after the 0.3.0 release and is not part of it. Every entry links to the section that documents it, and those sections carry the NEW badge. Each brick of the suite keeps its own page of this kind; the ecosystem index gathers them. When the next release train ships, this page is frozen with it and restarts empty on the dev line.
Jakarta Data
-
An enum is stored as
@Enumeratedsays (mansart#26) —@Enumeratedused to be read and then ignored: every enum was stored by its name,@Enumerated(EnumType.ORDINAL)included. Now@Enumerated(EnumType.ORDINAL), and a bare@Enumerated, store the constant’s index in an integer column, and@Enumerated(EnumType.STRING)stores its name, in writes, row mapping, projections,WHEREbindings and the generated DDL. An enum with no@Enumeratedstill stores its name, unlike the Jakarta Persistence default, which is the index. This changes what an existing application does if it declaresORDINAL: its tables hold names, and Mansart now writes and reads indexes for that attribute. Either switch the attribute to@Enumerated(EnumType.STRING)(or drop the annotation) to keep the data as it is, or convert the column to indexes before upgrading. Enum storage, Upgrading from 0.3.0. -
An
UPDATEor aDELETEcannot follow aSELECTclause — the JDQL parser Mansart uses at run time — for a repository generated at run time and forJdqlExecutor.run— read aSELECTclause and then went on to whatever followed it, soSELECT this DELETE FROM Productran as aDELETE. Such a statement is now refused with aMansartDataException. A tool that tells reads from writes by the first keyword can no longer be led to run a write as a query.@QueryJDQL. -
mansart-data-cdiis an explicit bean archive (mansart#33) — the jar now ships aMETA-INF/beans.xml(annotated), likemansart-transactions-cdi, so a CDI container that does not scan implicit archives, such as Weld SE by default, treats it as a bean archive. Under Vauban nothing changes. Bean archives.
The Jakarta Data core for tools
io.vidocq.mansart.data.core gives a tool — the Vidocq dev console, for one — what Mansart knows about an entity and a way to run a JDQL statement typed as text:
-
EntityModels.of(Class<E>)— the model Mansart uses for an entity: its generated_Entity.$MODEL, or one built at run time from the mapping annotations. A tool no longer has to re-read the annotations or reflect on generated classes to describe an entity. The core API for tools. -
JdqlExecutor.run(jdql, parameters, model, runtime)— parses one statement against the entity’s model, binds its named parameters by name, converts a text value to the attribute’s type (enum,java.time, numbers, booleans, UUIDs), and runs it as a@Querymethod’s statement would, returning aJdqlResult: entities, projected rows, a count or an aggregate’s value. An overload withmaxRowsreads at most that many rows, as a SQLLIMIT.isWriteandtargetread a statement’s first keyword and its entity without parsing it. The core API for tools. -
An entity model no longer keeps its class loader reachable — models used to be cached in a static map keyed by the entity class, which kept every class and its loader alive. Under a dev reload, where the application layer is replaced while Mansart stays, each discarded layer stayed in memory. Models now live with their class and go away with its loader. The core API for tools.
Jakarta Persistence
-
Mansart JPA P0–P12 delivered within scope —
mansart-persistenceprovides entity lifecycle, JPQL/Criteria, XML mapping, container integration, cache and Validation integration. The locally patched PostgreSQL TCK passes all non-skipped tests; comparative benchmarks and a modular Leyden AOT smoke are recorded. Remaining mapping boundaries and the local TCK patch are explicit; no formal certification or GraalVM native-image support is claimed. See implementation status, TCK evidence and performance methodology.