从视图中选择并插入到spring jpa表中

5sxhfpxr  于 2021-07-24  发布在  Java
关注(0)|答案(1)|浏览(300)

我有两个实体叫做学生和课程。它们以以下格式存储在表中
学生
我的第一个名字最后一个名字是约翰尼古德珍妮多特琼斯
课程
IDName主题1计算2生物科学3化学科学
学生和课程有一个多对多的关系存储在一个名为student\u course的表中
学生课程
学生课程
我有一个名为v\u student\u course的student\u课程视图,它包含student\u id、course\u id和主题(从course表中检索)。
学生课程
学生课程科目11数学23科学
在我的springboot应用程序中,我有一个学生类和一个课程类,分别如下所示

@NoArgsConstructor
@AllArgsConstructor
@Table(name = "Student")
public class Student {
    @GeneratedValue(generator = "generator")
    @Column(name = "id")
    protected @Id int id;

    @Column(name = "first_name")
    protected String firstName;

    @Column(name = "last_name")
    protected String lastName;

    //getters and setters left out for this example
}
@NoArgsConstructor
@AllArgsConstructor
@Table(name = "Course")
public class Course{
    @GeneratedValue(generator = "generator")
    @Column(name = "id")
    protected @Id int id;

    @Column(name = "name")
    protected String name;

    @Column(name = "subject")
    protected String subject;

    //getters and setters left out for this example
}

我必须通过展示学生被分配到什么课程来表示学生和课程之间的多对多关系。但是,所有选择必须使用view v\ U student\课程完成,所有插入/更新必须使用表格student\课程完成。
我应该使用manytomy注解吗?但是,我注意到,如果学生与课程没有关联,这将导致nullpointerexceptions。或者我应该为桥梁关系创建一个单独的类,名为studentcourse.java?
如何声明选择必须来自与插入/更新不同的表/视图?

2q5ifsrm

2q5ifsrm1#

我通过设置将此代码添加到学生类来解决此问题

@ManyToMany(fetch = FetchType.LAZY, targetEntity = Course.class)
@JoinTable(name = "v_student_course",
    joinColumns = { @JoinColumn(name = "student_id", referencedColumnName = "id") },
    inverseJoinColumns = { @JoinColumn(name = "course_id", referencedColumnName = "id")})
protected List<Course> courses = new ArrayList<>();

我把这个代码添加到了课程中

@ManyToMany(mappedBy = "courses")
protected List<Student> students = new ArrayList<>();

然后我把这个添加到我的studentrepository界面

@Modifying
@Query (
    value = "INSERT INTO student_course (student_id, course_id) "
            "VALUES (:studentId, :courseId)",
    nativeQuery = true
)
public void saveStudentCourse(@Param("studentId") String studentId,
                              @Param("courseId") String courseId);

现在,每当我搜索一个学生时,它也会从v\u student\u course中选择学生关联的课程,但是当我插入一个新的学生课程关联时,它会直接插入到表中。

相关问题