我有一个表student和一个表course,它们被一个关联表student_course引用。这就是实体的样子
@Entity
public class Student {
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(
name = "id",
strategy = "com.something.UUIDGenerator"
)
private UUID id;
@ManyToMany(cascade = { CascadeType.PERSIST, CascadeType.MERGE })
@JoinTable(
name = "student_course",
joinColumns = @JoinColumn(name = "student_id"),
inverseJoinColumns = @JoinColumn(name = "course_id")
)
private List<Course> courses;
@OneToMany(mappedBy = "student")
@OrderBy("sequenceNumber ASC")
private List<StudentCourse> studentCourses;
}
@Entity
public class Course {
@Id
@GeneratedValue(generator = "UUID")
@GenericGenerator(
name = "id",
strategy = "com.something.UUIDGenerator"
)
private UUID id;
@ManyToMany(mappedBy = "students")
private List<Student> students;
@OneToMany(mappedBy = "course")
@OrderBy("sequenceNumber ASC")
private List<StudentCourses> studentCourses;
}
@Entity
public class StudentCourse {
@EmbeddedId
private StudentCourseId studentCourseId;
@ManyToOne
@MapsId("studentId")
@JoinColumn(name = "student_id")
private Student student;
@ManyToOne
@MapsId("courseId")
@JoinColumn(name = "course_id")
private Course course;
private Long sequenceNumber;
}
@Embeddable
public class StudentCourseId implements Serializable {
private UUID studentId;
private UUID courseId;
}
我对表没有级联约束,我尝试用查询从student中删除记录,但在student_course中引用的记录没有删除。如果我使用StudentRepository的deleteById,那么在student_course中引用它们的记录也会被删除。我不想那样,我想处理删除。
@Repository
public interface StudentRepository extends CrudRepository<Student, UUID> {
}
你知道为什么会这样吗我不希望删除这两个表的记录时发生级联。
我正在使用PostgreSQL和spring-boot-starter-parent的2.3.3.RELEASE。
1条答案
按热度按时间hmtdttj41#
您已经在学生和课程实体之间建立了多对多关系。请考虑删除一对多关系,也没有必要创建一个StudentCourse实体,Hibernate将检测您的student_course表。让我们考虑客户和产品之间的多对多Map。
@ManyToMany(mappedBy =“customers”)私有列表产品;
@ManyToMany @JoinTable(name =“customer_product”,joinColumns = @JoinColumn(name =“product_id”),inverseJoinColumns = @JoinColumn(name =“customer_id”))私有列表客户;
在这里,客户是关系的拥有方。