No offense, but your class / table structure seems overly complicated for something so simple. Personally, I'd abandon inheritance entirely (especially a table per subclass approach) and consolidate all of the properties into a single class with a type property if you need to differentiate between mobile and home phone numbers:
Code:
class PhoneNumber {
private String key;
private PhoneNumberType type;
private String countryCode;
private String areaCode;
private String number;
}
If the aim of your query is to select the phone number for a given person, then the HQL would simply be a matter of:
select phoneNumber from Person where key = :key
On a side note, you don't typically specify the join conditions in a query (with the exception of the join type). Assuming your classes are configured properly, Hibernate is aware of the underlying relationship that exists between the associations and will automatically generate the proper join SQL necessary to retrieve the data.