У меня есть 3 модели Person
, Role
и Position
, представляющие людей в футбольном клубе, таких как
public class Person {
private Long id;
private String name;
private Role role;
}
public class Role {
private Long id;
private String name; //like manager, goalkeeping_coach, player
}
public class Position {
private Long id;
private String name; //striker, midfielder, defender, goalkeeper
}
Проблема в том, что position
имеет смысл только для человека, если его рольэто player
.Поэтому, если я сделаю
public class Person {
private Long id;
private String name;
private Role role;
private Position position;
}
, то для всех person
экземпляров, которые не имеют роли player
, в поле position
будут храниться нулевые значения.Точно так же могут быть другие атрибуты, которые имеют смысл только для экземпляров manager
и / или goalkeeping_coach
.
Я попытался сделать класс Person
абстрактным
@Inheritance(strategy = InheritanceType.TABLE_PER_CLASS)
public abstract class Person {
private Long id;
private String name;
private Role role;
}
public class Player extends Person {
private Position position;
}
public class Manager extends Person {
}
Это приведет кэкземпляры player
и manager
должны быть сохранены в разных таблицах.Но проблема теперь возникает, если меняется role
из person
(скажем, игрок уходит в отставку и становится менеджером клуба).Затем я должен был бы переместить строку из одной таблицы в другую (скажем, удалить экземпляр player
и создать новый экземпляр manager
, используя те же данные, исключая данные position
), который не выглядит какхороший путь.
Итак, каков наилучший подход к этому сценарию?Можно ли иметь нулевые значения, как в первом случае?