【问题标题】:How to insert into associative table in many to many relationship by Hibernate?如何通过 Hibernate 在多对多关系中插入关联表?
【发布时间】:2020-10-23 00:20:12
【问题描述】:

我有两张表 Student 和 Course 具有多对多关系。

@Entity
public class Student {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    ...
    @ManyToMany(mappedBy="students")
    private List<Course> courses = new ArrayList<Course>();

    ...
    // getters and setters
}


@Entity
public class Course {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    ...
    @ManyToMany
    private List<Student> students = new ArrayList<Student>();

    ...
    // getters and setters
}

我正在使用 Hibernate 和 Persistence API 进行映射 假设我在 Course 表中有 5 门课程:

Id  Name
1  Course1
2  Course2
3  Course3
4  Course4
5  Course5

Student 表从零记录开始。一旦一个学生被插入到学生表中,即

Id  Name
1  Student1

我还需要在 CourseStudent 表中插入至少一条记录。假设 Stduent1 学习了三个课程 Course1、Course2 和 Course3,那么我需要插入:

StudentId CourseID
1         1
1         2
1         3

我现在遇到的困难是,在我的数据模型中,我没有 CourseStudent 类,而只有 Student 和 Course 以及它们的映射 @many_to_many。这个表CourseStudent 是由Hibernate 创建和管理的,它的映射类CourseStudent 似乎没有必要。

在这种情况下,如何将记录插入到模型中没有对象映射的关联表中?我是否必须显式创建一个类 CourseStudent 来实现这一点,以便我可以将数据保存到关联表中?

【问题讨论】:

标签: java mysql jpa associations


【解决方案1】:

不,您不必这样做。它应该像将课程添加到学生的课程列表并更新(保存)学生一样简单。

但请记住:据我所知,hibernate 无法自行更新双向关系。这意味着您必须将每门课程的学生添加到学生列表并保存课程。

希望对你有帮助

【讨论】:

  • 我这样做了,“就像将课程添加到学生的课程列表并更新(保存)学生一样简单。”,然后检查 CourseStudent 表,它在全部。我是否也必须完成第二部分“您必须将每门课程的学生添加到学生列表并保存课程。”?
  • 我的意思是,一旦我将课程添加到学生的课程列表并更新(保存)学生,我应该会看到 CourseStudent 表发生变化。对吗?
  • 根据您的事务处理,您可能必须提交会话才能查看数据库中的更改。
  • 有人找到这个问题的答案了吗?我面临同样的问题,但我正在加载 @ManyToMany 关系懒惰。起初,我从控制器更新了对象,但它覆盖了数据库中的条目,这不是我想要的。然后,我尝试保存它,但得到 NullPointerException 错误。谢谢!
猜你喜欢
  • 2018-12-29
  • 2016-04-04
  • 1970-01-01
  • 2011-12-23
  • 1970-01-01
  • 2013-11-20
  • 2021-04-04
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多