Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java @许多映射不';t更新相应的表_Java_Hibernate_Jpa_Many To Many_Hibernate Mapping - Fatal编程技术网

Java @许多映射不';t更新相应的表

Java @许多映射不';t更新相应的表,java,hibernate,jpa,many-to-many,hibernate-mapping,Java,Hibernate,Jpa,Many To Many,Hibernate Mapping,我的课程课程 @Entity public class Course { @Column @Id private String courseCode; ... @ManyToMany(fetch = FetchType.EAGER ) @JoinTable( name = "Students_RegisteredCourse", joinColumns = {@JoinColumn(name =

我的
课程
课程

@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<>();


..
..
..
}
user
类通常是一个实体

我试图在创建新学生的同时将课程添加到注册课程中。但这是行不通的<代码>课程。getCourseByName(“离散数学”)工作正常。成功执行此代码后,不会向
Students\u 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();
session.beginTransaction();
学生临时工=新学生();
临时设置名称(“Siddharth Yadav”);
临时设置电子邮件(“siddharth16268@iiitd.ac.in");
临时设置卷编号(“2016268”);
临时设置密码(“[{Sid@123}]");
List cse=new ArrayList();
cse.add(Course.getCourseByName(“离散数学”));
cse.add(Course.getCourseByName(“高级编程”));
临时设置注册课程(cse);
会话更新(临时);
session.getTransaction().commit();

`

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

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);
}

也许您还需要向学生实体添加级联类型,这样您就可以更新课程了。cascade=CascadeType.PERSIST或您是否尝试使用会话合并或会话保存?只要给出一个想法,有没有一个简单的方法可以避免做两次加法?
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);
}
session.persist(temp);