Для этого можно использовать полиморфизм с абстрактным базовым классом.
@Entity
public class RolePlayed {
@ManyToOne
private User user;
@ManyToOne
private Role role;
@ManyToOne
private Body body;
...
}
@Entity
@Inheritance(strategy = InheritanceType.JOINED)
public abstract class Body {
...
}
@Entity
public class Department extends Body {
...
}
@Entity
public class Project extends Body {
...
}
@Entity
public class Group extends Body {
...
}
Ознакомьтесь с разделом Полиморфизм в учебном руководстве по Java Enterprise для хорошего обзора.
В качестве альтернативы вы также можете сделать сущность RolePlayed
абстрактной, с реализациями DepartmentRole
, GroupRole
и ProjectRole
.