JPA多次级联删除

时间:2012-04-06 22:56:43

标签: java jpa many-to-many toplink

我刚刚使用netbeans IDE开始使用JEE6,现在我正在使用toplink学习JPA。 我正在使用Netbeans IDE和mySQL。

我创建了两个非常简单的表,有多对多的关系:

table student
int id PK
varchar name

table teacher
int id PK
varchar name

//the mapping
table studentTeacher
int studentID FK
int teacherID FK

studentTeacher表将学生ID映射到教师ID,并在删除和更新时级联。

我使用了'从数据库中生成实体'netbeans功能,它运行正常: 我可以将Student对象添加到学生表中,然后我可以将Teacher对象添加到我的教师表中。

问题是,我如何创建一个'studentTeacher'实体并坚持下去?或者它已经由IDE完成了?

以下是来自Netbeans的自动生成的注释:

 //Student Entity annotation generated by Netbeans 7.0.1

 @Id
 @Basic(optional = false)
 @NotNull
 @Column(name = "id")
 private Integer id;
 @Size(max = 40)
 @Column(name = "name")
 private String name;
 @JoinTable(name = "studentTeacher", joinColumns =
 {
    @JoinColumn(name = "studentID", referencedColumnName = "id")
 }, inverseJoinColumns =
 {
    @JoinColumn(name = "teacherID", referencedColumnName = "id")
 })
 @ManyToMany
 private Collection<Teacher> teacherCollection;

谢谢!

1 个答案:

答案 0 :(得分:4)

正确地说,它已经由JPA实现完成,在您的情况下:TopLink。您不需要StudentTeacher实体,因为它本身不是实体,它只是实体 - 关系方案所需的辅助表,以便模拟您的多对多关系。

如果StudentTeacher之间的关系除了两个实体的外键之外还有其他属性,那么您将需要一个额外的实体,但您已经存在实体(Student和{ {1}})将不再具有多对多关系,而是具有该中间Teacher实体的一对多/多对一关系。

我的建议是,如果您的模型与示例中一样简单,请保持原样。