Я хочу реализовать эту схему:Проблема наследования JPA/Hibernate JOINED
То, что я сделал это:
Для Person класса:
/////***************Class Person ****///////////////
@Entity
@Inheritance(strategy=InheritanceType.JOINED)
@DiscriminatorColumn(name="role")
public class Person {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long id;
private String fName;
private String lName;
private String email;
@OneToMany(fetch = FetchType.EAGER)
@JoinColumn(name="profil_id")
private List<Role> listRole;
//getters & setters
}
Для другого класса я сделал это (это пример для Студенческого класса, однако для классов Учителя и директора это то же самое):
/////***************Class Student ****///////////////
@Entity
@DiscriminatorValue("etudiant")
public class Etudiant {
// other attributes owned to class
//getters & setters
}
И это класс Роль:
@Entity
public class Role {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
private Long idRole;
private String roleName;
//getters & setters
}
Система предусматривает, что администратор может создать человек без каких-либо ролей, и в будущем этого администратор может повлиять на их роли.
Ниже код, чтобы создать, в первый раз, человек с ролью студента (например) (проблем нет):
Student s=new Student("me", "mmm", "[email protected]");
m.addPerson(s);// "m" it's a defined variable (used in JUnit test)
Результаты этого кода является добавление студента в лицо таблицы и добавить его идентификатор в таблице учеников.
Мои вопросы:
1. Как я могу добавить роль человека? 2. Как я могу изменить роль (учитель ==> Директор или директор ==> Учитель) после добавления ролей?
Очень хороший вопрос. Я планирую написать статью на эту тему на моем [Hibernate Master Class] (http://vladmihalcea.com/tutorials/hibernate/) бесплатном учебном курсе в режиме онлайн. –