スーパークラスから id (データベース id) フィールドと他の 2 つの変数を継承するアプリのサブクラス エンティティ間の ManyToMany Relationship を構築する際に問題に直面しています。@MappedSuperclass
データベース テーブルのサブクラスのみをマッピングするために使用されます。サブクラスごとに 1 つのテーブルですEntity
。最後に、前述の ManyToMany Relationship に基づいて構築された Joined Table を作成したいと思います。
JoinTable
注釈の定義がわかりません@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...
}