0

我在我的应用程序的子类实体之间建立多对多关系时遇到了问题,这些子类实体继承了超类的 id (数据库 id)字段以及其他 2 个变量。@MappedSuperclass用于仅映射数据库表上的子类,每个子类一个表Entity。最后,我想生成一个基于我提到的多对多关系的连接表。

我无法弄清楚JoinTableAnnotation 的定义,我试图@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...
}
4

0 回答 0