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

时间:2017-11-16 11:55:29

标签: java hibernate jpa many-to-many hibernate-mapping

我的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 个答案:

答案 0 :(得分: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);
}

现在,持久性提供程序将知道此处存在相互manymanmany依赖关系,并对链接表执行插入。

同样,在这里重新创建学生..你应该使用persist而不是update:

session.persist(temp);