有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java@ManyToMany映射不会更新相应的表

我的Course

@Entity
public class Course {

    @Column
    @Id
    private String courseCode;

    ...

    @ManyToMany(fetch = FetchType.EAGER )
    @JoinTable(
            name = "Students_RegisteredCourse",
            joinColumns = {@JoinColumn(name = "courseCode")},
            inverseJoinColumns = {@JoinColumn(name = "email")}
    )
    private Set<Student> registeredStudents = new HashSet<>();


..
..
..
}

我的Students

@Entity
public class Student extends User {
...
@ManyToMany(mappedBy = "registeredStudents")
private List<Course> registeredCourse = new ArrayList<>();
...
}

user类通常是一个实体

我试图在创建新学生的同时将课程添加到注册课程中。但它不起作用Course.getCourseByName("Discrete Mathematics")很好用。成功执行此代码后,不会向Students_RegisteredCourse表中添加新行

    session.beginTransaction();

    Student temp = new Student();
    temp.setName("Siddharth Yadav");
    temp.setEmail("siddharth16268@iiitd.ac.in");
    temp.setRollNumber("2016268");
    temp.setPassword("[{Sid@123}]");

    List<Course> cse = new ArrayList<>();
    cse.add(Course.getCourseByName("Discrete Mathematics"));
    cse.add(Course.getCourseByName("Advanced Programming"));
    temp.setRegisteredCourse(cse);

    session.update(temp);
    session.getTransaction().commit();

`


共 (1) 个答案

  1. # 1 楼答案

    你必须确保每门课程的注册学员中都有新学员:

    List<Course> cse = new ArrayList<>();
    cse.add(Course.getCourseByName("Discrete Mathematics"));
    cse.add(Course.getCourseByName("Advanced Programming"));
    temp.setRegisteredCourse(cse);
    
    for(Course course: cse){
        cse.getRegisteredStudents().add(temp);
    }
    

    现在,持久性提供者将知道这里存在相互的多个依赖项,并对链接表执行插入

    同时,学生在这里被重新创造。。您应该使用persist而不是update:

    session.persist(temp);