当前位置: 首页 > 知识库问答 >
问题:

从视图中选择并插入表Spring JPA

刘和玉
2023-03-14

学生课程

我有一个名为v_student_course的Student_Course视图,它包含student_id、course_id和主题(从课程表中检索)。

V_student_course

@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
}

我必须通过显示一个学生被分配到什么课程来表示学生和课程之间的多对多关系。但是,所有选择必须使用v_student_course视图来完成,所有插入/更新必须使用student_course表来完成。

>

  • 是否应该使用ManyToMany注释来完成此操作?但是,我注意到,如果学生与课程没有关联,这将导致NullPointerExceptions。或者我应该为桥关系创建一个单独的类,称为StudentCourse.java?

    我如何声明选择必须来自与插入/更新不同的表/视图?

  • 共有1个答案

    昌和悦
    2023-03-14

    我通过设置将此代码添加到Student类来解决这个问题

    @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);
    
     类似资料:
    • 问题内容: 我是SQL的初学者,对Transact-SQL不太了解。 我意识到这是一个新手问题,但是我正在寻找一个简单的解决方案。 我有一个带有一些列()的表。 主表 我想从该表中选择数据并插入到其他两个表中。 第一桌 是来自的前三个字符的组合 第一个表中的数据按的前三个字符和客户代码分组 第二张桌子 那么,如何通过使用SQL选择主表的行来插入第一张表和第二张表呢? 感谢您的所有答复。 问题答案:

    • 问题内容: 我们正在使用SQL Server2005,但是这个问题可能适用于任何RDBMS。 从视图中选择所有列时,以下哪一项更有效? 或者 问题答案: 永远不要使用“选择*” !!!! 这是查询设计的基本规则! 这有多种原因。其中之一是,如果您的表上只有三个字段,并且您使用了调用查询的代码中的所有三个字段,则很有可能会随着应用程序的增长而向该表中添加更多字段,并且您的select *查询仅用于返

    • 问题内容: 我们正在使用SQL Server 2005,但是这个问题可能适用于任何RDBMS。 从视图中选择所有列时,以下哪一项更有效? 或者 问题答案: 永远不要使用“选择*” !!!! 这是查询设计的基本规则! 这有多种原因。其中之一是,如果您的表上只有三个字段,并且您使用了调用查询的代码中的所有三个字段,则很有可能会随着应用程序的增长而向该表中添加更多字段,并且您的select *查询仅用于

    • 我的代码在下面..在中 在onActivityResult(int requestCode,int resultCode,Intent data)中

    • 问题内容: 我尝试使用创建在一个列中具有两个值的视图,并且该视图已成功创建,但是当我尝试从中选择所有视图时,出现此错误: 我尝试研究此操作和串联运算符,但令我沮丧的是没有找到任何帮助。这是我用来创建视图和选择的代码。 问题答案: Oracle中的串联运算符是双管道。所述用于添加数字加在一起,因此,该错误。 该视图已成功创建,因为Oracle在创建数据时不会评估数据;仅确保它可以编译。

    • 问题内容: 有几种将数据插入表中的方法: 有没有办法使用,但我不想在colA中插入例如colAA值,而是总是将其插入1。 感谢帮助 问题答案: 只需在列表中添加一个常量