0
我有两个实体课程和CourseUser。使用OneToMany注释映射到CourseUser的课程。在课程中的CourseUser列表中添加CourseUser并更新后,新表将出现在CourseUser表中,但它未映射到课程。如果我更新后从课程中调用toString用户列表,它将是空的。休眠OneToMany关系不映射新数据
@Entity
@Table(name = "COURSES")
public class Courses{
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "course_id")
private int course_id;
@Column(name = "course_name", nullable = false)
private String courseName;
@Autowired
@OneToMany(mappedBy = "course", fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private Set<CourseUser> courseUsers = new HashSet<>(0);
CourseUser实体:
@Entity
@Table(name = "COURSE_USERS",
uniqueConstraints = {@UniqueConstraint(columnNames = {"course_name", "user_name"})})
public class CourseUser {
@Id
@GeneratedValue(strategy = GenerationType.AUTO)
@Column(name = "ev_id")
private int ev_id;
@Column(name = "course_name", nullable = false)
private String courseName;
@Column(name = "user_name", nullable = false)
private String userName;
@Column(name = "course_role")
private String courseRole;
@Column(name = "grade")
private int grade ;
@ManyToOne
@JoinColumn(name = "course_id")
private Courses course;
这是我的新courseUser添加到课程:
Courses course = courseDAO.getCourse(id);
Set<CourseUser> courseUsers = course.getCourseUsers();
CourseUser newUser = new CourseUser();
newUser.setUserName(name);
newUser.setCourseRole(role);
newUser.setCourseName(course.getCourseName());
courseUsers.add(newUser);
course.setCourseUsers(courseUsers);
update(course);
,这里是CoursesDAO更新方法:
public void update(Courses course) {
Session session = sf.openSession();
Transaction transaction = session.beginTransaction();
session.merge(course);
session.flush();
transaction.commit();
session.close();
}
初始化'Set courseUsers = new HashSet <>(0)'是什么目的? –
我已经在本教程中完成了https://www.mkyong.com/hibernate/hibernate-one-to-many-relationship-example-annotation/ – Petych