我在我的应用程序的子类实体之间建立多对多关系时遇到了问题,这些子类实体继承了超类的 id (数据库 id)字段以及其他 2 个变量。@MappedSuperclass
用于仅映射数据库表上的子类,每个子类一个表Entity
。最后,我想生成一个基于我提到的多对多关系的连接表。
我无法弄清楚JoinTable
Annotation 的定义,我试图@AttributeOverride
在每个子类中使用它来覆盖继承的 id。
你能指导我吗?
Person
超类:
@MappedSuperclass
abstract public class Person {
@Id
@GeneratedValue(strategy=GenerationType.IDENTITY)
@Column(name = "id", nullable = false, updatable = false, unique=true)
private int id;
@Column(name = "First_Name")
private String firstName;
@Column(name = "Last_Name")
private String lastName;
//Constructors Goes Here...
//Getters and Setters Goes Here....
}
Teacher
子类:
@Entity
@Table(name="Teacher")
@AttributeOverride(name = "id", column = @Column(name = "tid"))
public class Teacher extends Person {
@Column(name="Teacher_Id", unique=true)
private int teacherId;
@Column(name="Years_Experience")
private double yearsExperience;
@ManyToMany(cascade = CascadeType.ALL)
@JoinTable(name="Teachers_Students",
joinColumns=@JoinColumn(name="tid", referencedColumnName="tid"),
inverseJoinColumns=@JoinColumn(name="sid", referencedColumnName="sid"))
private ArrayList<Student> students = null;
//Constructors Goes Here...
//Getters and Setters Goes Here...
}
学生子类:
@Entity
@Table(name="Student")
@AttributeOverride(name = "id", column = @Column(name = "sid"))
public class Student extends Person {
@Column(name="Student_Id", nullable = false, unique=true)
private int studentId;
@Column(name="Year_Average_Grade")
private double yearAverageGrade;
@ManyToMany(mappedBy = "students", cascade = CascadeType.ALL)
ArrayList<Teacher> teachers= null;
//Constructors Goes Here...
//Getters and Setters Goes Here...
}