Skip to content

Commit de40933

Browse files
committed
no-mistakes(document): docs(changelog): record field.map codegen completion in [Unreleased]
1 parent a2d65fb commit de40933

1 file changed

Lines changed: 34 additions & 0 deletions

File tree

CHANGELOG.md

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,40 @@ found is in this entry and the ones below it.
3232

3333
## [Unreleased]
3434

35+
### Fixed — `field.map` codegen completes: Java generates it, C# persists it
36+
37+
The subtype is registered in all five ports and TypeScript, Kotlin and Python already
38+
generated it. Java and C# were the two halves left, failing in opposite directions — and
39+
**this entry is CODEGEN only**, a bound the last paragraph states because the headline
40+
invites the wider reading.
41+
42+
**Java (`codegen-spring`) failed the build outright.** A `field.map` on an entity flowed
43+
into the DTO record and reached `SpringTypeMapper`'s unsupported-type throw, so any entity
44+
carrying one failed Java codegen. It now emits `java.util.Map<String, V>` — `V` the scalar
45+
named by `@valueType` or the value object named by `@objectRef` — and the value-object
46+
emission walk now spans a map's `@objectRef`, so a record reached only through a map is
47+
actually generated rather than merely named by a DTO. `isArray` does not apply to a map, so
48+
the type is never wrapped in `List<>`; every other port emits the map bare.
49+
50+
**C# (`MetaObjects.Codegen`) emitted the property but not the storage.**
51+
`EntityGenerator`'s `Dictionary<string, V>` property was already there;
52+
`DbContextGenerator` had no map branch, so EF got no column type and no converter — the
53+
property did not persist onto the `jsonb` column the TS-owned migration creates (ADR-0015).
54+
It now emits an explicit jsonb column type plus a shared converter/comparer pair, on
55+
entities, read-only projections and flattened value-object members alike. The comparer is
56+
load-bearing, not decoration: EF snapshots a value-converted property by reference, so a
57+
converter alone would leave an in-place `entity.Labels["k"] = v` undetected and the UPDATE
58+
would never fire.
59+
60+
**Scope.** No runtime persistence layer reads or writes a map except Python's
61+
`ObjectManager`, and no persistence- or api-contract-conformance corpus exercises
62+
`field.map` on any port — the subtype remains loader- and codegen-gated only, and
63+
[field-types.md](docs/features/field-types.md) carries the full runtime picture. An
64+
adopter who read "field.map now works" out of this entry would be over-reading it.
65+
**`metamodelVersion` does not move**: no registered vocabulary changed, and
66+
`expected-registry.json` is untouched.
67+
68+
3569
### Added — `meta verify` advises when a provider still carries the prop 1.0 renamed away
3670

3771
`<EntityFetcherProvider value={f}>` does not typecheck. The `0.x → 1.0` migration note and

0 commit comments

Comments
 (0)