Поскольку домашние животные находятся на стороне «многих», они, вероятно, указывают на свои соответствующие лица. Это означает, что вы можете просто выбрать уникальный (Person) в таблице Pets, где person не равен NULL. Так как вы используете таблицу для иерархии классов, существует столбец дискриминатора, поэтому вы можете различать тип, который называется «.class».
String hql = "select unique(p.person) from Pet p where p.class = ? and p.person is not null"
и затем выполнить запрос, используя позиционные параметры - то есть заменить? с собакой или кошкой или чем-то еще. Обратите внимание, что я составил имена полей, поэтому вам придется заменить их фактическими значениями.