gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:25:08 25 4
gpt4 key购买 nike

我的类(class)类(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<>();


..
..
..
}

我的学生类(class)

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

user 类通常是一个实体。

我正在尝试在创建新学生时将类(class)添加到注册类(class)中。但它并没有奏效。 Course.getCourseByName("离散数学") 工作正常。成功执行此代码后,不会向 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();

`

最佳答案

您必须确保每个类(class)也都有已注册的学生,其中包含新学生:

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

关于java - @ManyToMany 映射不会更新相应的表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47329053/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com