3 performance issues in org.hibernate.mapping.PersistentClass:
1. The mappedClass is loaded again and again calling ReflectHelper.classForName(className). The mapped class is not changed so it should be hold as member variable.
2. Method getProperty(String, Iterator) uses a MappingException which is ignored in getRecursiveProperty(String, Iterator). This makes the recursion more expensive than required.
3. Method getProperty calls StringHelper.root( propertyName ) for every property. Simply change the while in if do while.
A fix is provided as attachment.
Thanks for the patch and PR!