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