Reference https://hibernate.atlassian.net/browse/HHH-10111
This comes down to the idea of a Type's mutability : can the thing's internal state be changed? We use this for all kinds of optimizations. If the internal state is not mutable, we know that "making a deep copy", for example, is a simple matter of just returning the original. It also affects how we dirty check it, how we (2nd level) cache it, etc. So far we have assumed that types mapped using AttributeConverters are immutable. However, this Jira is an example of where that breaks down. I think for now we will have to assume that the AttributeConverter entity type is mutable and build an appropriate MutabilityPlan. Moving forward I think we should consider a means to allow developers using AttributeConverter along with immutable state (which seems to be the majority case) the option to somehow indicate that the converted-to type is immutable which allows us to apply the more efficient plan. Thoughts on the best way to achieve this latter part? I am initially thinking an optional contract for the AttributeConverter impl itself to implement: @Converter class MyAttributeConverter implements AttributeConverter<Name,String>, HibernateAttributeConverter { // normal AttributeConverter methods /** * HibernateAttributeConverter */ @Override public boolean isMutable() { return true; } } Another option is to develop some annotations that are applied to the AttributeConverter impl (much like the javax.persistence.Converter itself): @Converter @org.hibernate.annotations.MutableConvertedState(true|false) class MyAttributeConverter implements AttributeConverter<Name,String> { // normal AttributeConverter methods } _______________________________________________ hibernate-dev mailing list hibernate-dev@lists.jboss.org https://lists.jboss.org/mailman/listinfo/hibernate-dev