For reasons I've already stated I do not like the phrase "value type" here. As Java moves to version 10 and beyond, "value type" will come to be synonymous with that Java 10 feature, which has an incorrect connotation with what we are describing here. I'm ok with some way of making this explicit (in fact I think its should only be explicit), just not the term. I actually think our existing @Immutable fits well here. If a composite class is defined as immutable that would trigger this behavior - the expectation being that it would have a full constructor[1] and possibly we would check for final fields. Those expectations not being met would be an exception. [1] You wont like this part, but there would also need to be a set order to the arguments in the constructor - an order that is defined by Hibernate. This comes down to arrays and how Hibernate handles "disassembled"/"dehydrated" state |