我想实现这个架构:
我做的是:
对于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
}
对于其他课程,我这样做了(这是Student课程的一个例子,但是对于Teacher和Director课程,它是相同的):
/////***************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", "me@gmail.com");
m.addPerson(s);// "m" it's a defined variable (used in JUnit test)
此代码的结果是添加student in person表并在学生表中添加他的ID。
我的问题是:
1。如何为人物添加角色? 的 2。如何在添加角色后更改角色(教师==&gt;导演或导演==&gt;教师)?
答案 0 :(得分:0)
使用JOINED继承,在保留基类条目的同时更改子类类型并不容易,因此您可以简单地使用组合来代替继承。
Person可以与Etudiant有一个@OneToOne(mappedBy)
关联,其中Etudiant有一个@OneToOne
关联返回Person(FK回到Person的PK)。
Etudiant
仍然可以使用继承,因此它可以是Student
,PhdStudent
,Teacher
,Director
。
通过这种方式,您可以轻松地将Person
从Teacher
转为Director
。您只需要更改person.etudiant
关联。