By the way, there is a workaround - it works as expected when I add an explicit left join, i.e.:
query.select(root) .orderBy(cb.asc(root.join("vendorInfo").join("vendor", LEFT).get("name")));
rather than:
query.select(root) .orderBy(cb.asc(root.get("vendorInfo").get("vendor").get("name")));