AbstractEntityPersister#resolveDirtyAttributeIndexes checks the arrays of dirty attributes against the entity’s attribute mappings. (Line 2607 in version 6.1.7) As an optimization, it assumes that both arrays are alphabetically sorted to reduce the algorithmoic complexity to O. However, for entities with superclasses, the attribute mappings aren’t sorted alphabatically. The superclass attributes are always listed first. This causes some dirty attribute names to never be checked against their appropriate attribute mapping. In our case, this causes some changed fields to be silently skipped on updates, leading to data corruption and unexpected/undefined behaviour in our application logic. |