
== which FormatMapper with only Jackson 3 on the classpath, nothing configured
getJsonFormatMapper() -> org.hibernate.type.format.jackson.Jackson3JsonFormatMapper
Jackson 2 present? false; Jackson 3 present? true

== schema evolution: stored JSON that does not match the record
extra-key     -> FAILED tools.jackson.databind.exc.UnrecognizedPropertyException: Unrecognized property "colour" (class com.ankurm.jsoncolumns.model.Dimensions), not marked as ignorable (3 known properties: "widthMm", "heightMm", "depthMm")
missing-key   -> loaded Dimensions[widthMm=1, heightMm=0, depthMm=0]
wrong-type    -> FAILED tools.jackson.databind.exc.InvalidFormatException: Cannot deserialize value of type `int` from String "wide": not a valid `int` value
not-an-object -> FAILED tools.jackson.databind.exc.MismatchedInputException: Cannot deserialize value of type `com.ankurm.jsoncolumns.model.Dimensions` from Array value (token `JsonToken.START_ARRAY`)

== the fix for extra keys: @JsonIgnoreProperties(ignoreUnknown = true) on the record
stored {"widthMm":7,"colour":"red"} -> loaded Tolerant[widthMm=7]

== hibernate.type.json_format_mapper = your own Jackson 3 JsonMapper (snake_case)
dimensions = {"depth_mm": 3, "width_mm": 1, "height_mm": 2}
specs      = {"material": "tin", "weight_kg": 0.5, "certifications": []}
read back  = Dimensions[widthMm=1, heightMm=2, depthMm=3]

== java.time inside a JSON value with the default mapper
Map.of("at", Instant) stored as {"at": 1793355330.000000000}
read back as {at=1.79335533E9} (Double)
