Если Person может быть и тем и другим, вы не можете решить это с помощью наследования, потому что Java не допускает множественное наследование. Так что вам придется использовать Aggregation, которая сбивает с толку на семантическом уровне, потому что у нее есть родитель, а не родитель. Но я боюсь, что тебе придется идти по этому пути:
@Entity
public class Person{
@Id
private Long id;
@OneToOne(optional=true)
private Employee employee;
@OneToOne(optional=true)
private Parent parent;
public boolean isParent(){return parent!=null;}
public boolean isEmployee(){return employee!=null;}
}
@Entity
public class Employee{
@Id
private Long id;
@OneToOne(mappedBy="employee",optional=false)
private Person person;
}
@Entity
public class Parent{
@Id
private Long id;
@OneToOne(mappedBy="parent",optional=false)
private Person person;
}
(методы получения / установки и т. Д. Опущены)