当它是Hibernate管理的Bridge表时,没有与Bridge表关联的POJO类。如何将数据插入其中。
您可以考虑情景很多学生都有很多课程。
如何在更新学生或课程表时将数据存储到student_course表中。
以下代码片段用于理解目的并测试结果
Student student = new Student();
student.setName("abc");
List<Course> courses = new ArrayList<Course>();
Course course1 = new Course();
course1.setName("course1");
Course course2 = new Course();
course2.setName("course2");
Course course3 = new Course();
course3.setName("course3");
courses.add(course1);
courses.add(course2);
courses.add(course3);
student.setCourses(courses);
session.save(student);
session.close();
上面的代码只是在两个表中插入数据。 但是没有迹象表明course1,course2和course3属于student,因为它没有在student_course表中保存数据。
答案 0 :(得分:1)
桥接/连接/交叉表由多对多关系表示,或由表示关系的单独实体表示。
多对多的例子:
Person
List<Club> clubs;
Club
List<Person> members;
cross table person_club (person_id, club_id);
这里的俱乐部和成员处于多对多关系中,映射到交叉表。如果您向俱乐部或俱乐部添加会员,则在保存实体时会将数据添加到交叉表中。
实体示例:
Article
User
Tag
String label;
ArticleUserTag
Article article;
User user;
Tag tag;
cross table article_user_tag (article_id, user_id, tag_id)
此处ArticleUserTag是表示文章,用户和标签之间关系的实体。要标记文章,必须使用所需的文章,用户和标记创建新的ArticleUserTag实例。保存后,数据将插入到交叉表中。
编辑:不要在学生上设置新列表。试试这个:
学生班:
public class Student {
private List<Course> courses;
@ManyToOne(....)
public List<Course> getCourses() {
return courses;
}
}
代码中的某处:
try {
Student student = new Student();
student.setName("abc");
session.save(student);
Course course1 = new Course();
course1.setName("course1");
session.save(course1);
Course course2 = new Course();
student.setName("abc");
session.save(course2);
student.getCourses().add(course1);
student.getCourses().add(course2);
session.save(student);
}
finally {
// always close in finally block, or use Java 8's try-with-resources
session.close();
}