> Value classes cannot be null.
Won't this be an issue for JPA/JSONB? `null` is a an important and value in JSON and nearly every database, and for modeling the real world.
Won't this be an issue for JPA/JSONB? `null` is a an important and value in JSON and nearly every database, and for modeling the real world.
record Person(String name, Age age, Iban iban) {}
// {"name": "SuperMario", "age": null, "iban": null}
Person result = mapper.readValue(json, Person.class);
assertThat(result.age()).isNull(); // passes — value class field, null
assertThat(result.iban()).isNull(); // passes — value class field, null
Jackson bypasses the constructor for null JSON tokens (getNullValue() short-circuits), so the
validation in new Age(...) never runs. Both Age and Iban are value classes; both fields are null.
What do you think? Of course, there are limitations as Person cannot be flattened anymore but I guess Valhalla will ship more JEPs later?Null is the thing which it isn't. A null value is evidence that your modelling does not fit the domain.
I guess since basic types, like an int or double, cannot be null, I understand why these cannot be null. This unfortunately limits their usefulness, but it's a carryover from the underlying properties of the basic type.