java - JPA多对多级联删除

标签 java jpa many-to-many toplink

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

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

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 表将 Students id 映射到 Teachers id,在删除和更新时级联。

我使用了“从数据库生成实体”netbeans 功能,它工作正常: 我可以将一个学生对象添加到我的学生表,我可以将一个教师对象添加到我的教师表。

问题是,我如何创建一个“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;

谢谢!

最佳答案

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

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

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

关于java - JPA多对多级联删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10050156/

相关文章:

java - 框/表内的输入框

java - 重新生成 SHA-1 哈希值与存储的数据库哈希值不匹配

java - JPA 对所有者的多对多合并触发对连接表的删除

java - 委托(delegate)可能向函数抛出异常的代码是否被认为是良好的编码标准?

java - 什么是NullPointerException,我该如何解决?

java - OpenJPA JPQL 问题中的双向 OneToMany/ManyToOne 映射

c# - 使用 Entity Framework Core 在具有多对多关系的数据透视表中插入新记录

ruby-on-rails - 如何使用 elasticsearch-rails 为多对多关联设置映射

Java - 从文件读取返回null

jpa - 使用 jpa 条件查询获取列的最大值