1

我有 2 个班级,一个 Room 班级和一个 Student 班级。一个房间可以有很多学生,而一个学生也可以有很多房间。因此我使用了@ManyToMany 关系

public class Room {
  @ManyToMany
  private Collection<Student> studentList = new ArrayList<Student>();
}

public class Student {
  @ManyToMany(mappedBy="studentList")
  private Collection<Room> roomList = new ArrayList<Room>();
}

因为我想使用 1 个映射表,即 Room_Student,所以我能够将一组学生添加到一个房间。当我尝试将集合添加到学生时,休眠没有保存它。这里是

Collection<Student> collectionOfStudents=new ArrayList<Student>();
Room room1=(Room) session.get(Room.class, 1);
Student student1=(Student) session.get(Student.class, 1);
Student student2=(Student) session.get(Student.class, 2);
collectionOfStudents.add(student1);
collectionOfStudents.add(student2);
room1.getStudentList().addAll(collectionOfStudents)
session.update(room1);

这有效并插入到表 Room_Student

当我这样做的时候

Collection<Room> collectionOfRooms=new ArrayList<Room>();
Student student1=(Student) session.get(Student.class, 1);
Room room2=(Room) session.get(Room.class, 2);
Room room3=(Room) session.get(Room.class, 3);
collectionOfRooms.add(room2);
collectionOfRooms.add(room3);
student1.getRoomList().addAll(collectionOfRooms);
session.update(student1);

没有插入到 room2 和 room3 的表 Room_Student 中。感谢所有的答复

编辑1:我添加

public class Student {
  @ManyToMany(mappedBy="studentList",cascade={CascadeType.ALL})
  private Collection<Room> roomList = new ArrayList<Room>();
}

student1.getRoomList().addAll(collectionOfRooms);
session.update(student1);

没有更新/插入房间到表中

4

2 回答 2

4

在您的映射中,Room是拥有方并且Student是拥有方。因此,您必须始终将学生添加到房间中,以便在房间和学生之间建立关系。即使您使用 Cascading,反之亦然。您将始终必须在 ORM 中的关系中定义拥有方,并始终使用该方本身来创建关系。此链接进一步阐明了该主题。此外,如果您需要更深入地研究,您应该阅读 JPA/hibernate 文档。

于 2012-08-04T22:56:31.363 回答
0

感谢 Satadru,Hibernate 不会以其他方式持续存在,因此我必须删除映射(mappedBy),并且两者

将创建Student_Room表和 Room_Student表。这显示房间拥有学生和学生拥有房间而不是仅Student_Room

然而,OJB 很好地工作了这个特性。

于 2012-08-04T23:07:05.147 回答