@ManyToMany 映射不更新相应的表
@ManyToMany mapping doesn't update the corresponding Tables
我的Course
class
@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
class
@Entity
public class Student extends User {
...
@ManyToMany(mappedBy = "registeredStudents")
private List<Course> registeredCourse = new ArrayList<>();
...
}
user
class 通常是实体。
我正在尝试在创建新学生时将课程添加到 registeredCourses。但它没有解决。 Course.getCourseByName("Discrete Mathematics")
工作正常。成功执行此代码后,Students_RegisteredCourse
table 不会添加新行。
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();
`
您必须确保每门课程的注册学生中都有新学生:
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);
}
现在持久性提供程序将知道这里存在相互的 manytomany 依赖关系并执行插入 link table.
另外,由于 Student 是在这里重新创建的。您应该使用 persist 而不是 update:
session.persist(temp);
我的Course
class
@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
class
@Entity
public class Student extends User {
...
@ManyToMany(mappedBy = "registeredStudents")
private List<Course> registeredCourse = new ArrayList<>();
...
}
user
class 通常是实体。
我正在尝试在创建新学生时将课程添加到 registeredCourses。但它没有解决。 Course.getCourseByName("Discrete Mathematics")
工作正常。成功执行此代码后,Students_RegisteredCourse
table 不会添加新行。
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();
`
您必须确保每门课程的注册学生中都有新学生:
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);
}
现在持久性提供程序将知道这里存在相互的 manytomany 依赖关系并执行插入 link table.
另外,由于 Student 是在这里重新创建的。您应该使用 persist 而不是 update:
session.persist(temp);