The AbstractPropertyMapping source code:
private PersistentClass getCommonPersistentClass(PersistentClass clazz1, PersistentClass clazz2) { while ( clazz2 != null && !clazz2.getMappedClass().isAssignableFrom( clazz1.getMappedClass() ) ) { clazz2 = clazz2.getSuperclass(); } return clazz2; }
In my case, the entities are dynamic-map. So when it calls 'clazz2.getMappedClass()', a null returned.