docs: protected Class<?> getPropertyClass(ClassMetadata meta, String propertyName) throws HibernateLayerException {
  		// try to assure the correct separator is used
  		propertyName = propertyName.replace(XPATH_SEPARATOR, SEPARATOR);
  
  		if (propertyName.contains(SEPARATOR)) {
  			String directProperty = propertyName.substring(0, propertyName.indexOf(SEPARATOR));
  			try {
  				Type prop = meta.getPropertyType(directProperty);
  				if (prop.isCollectionType()) {
  					CollectionType coll = (CollectionType) prop;
  					prop = coll.getElementType((SessionFactoryImplementor) sessionFactory);
  				}
  				ClassMetadata propMeta = sessionFactory.getClassMetadata(prop.getReturnedClass());
  				return getPropertyClass(propMeta, propertyName.substring(propertyName.indexOf(SEPARATOR) + 1));
  			} catch (HibernateException e) {
  				throw new HibernateLayerException(e, ExceptionCode.HIBERNATE_COULD_NOT_RESOLVE, propertyName,
  						meta.getEntityName());
  			}
  		} else {
  			try {
  				return meta.getPropertyType(propertyName).getReturnedClass();
  			} catch (HibernateException e) {
  				throw new HibernateLayerException(e, ExceptionCode.HIBERNATE_COULD_NOT_RESOLVE, propertyName,
  						meta.getEntityName());
  			}
  		}
  	}