gpt4 book ai didi

java - 使用 @ManyToMany hibernate 并更新两种方式

转载 作者:行者123 更新时间:2023-11-29 03:44:02 25 4
gpt4 key购买 nike

我有 2 个类(class),一个 Room 类(class)和一个 Student 类(class)。一个Room可以有很多Student,一个Student也可以有很多Room。因此我使用了@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,所以我能够将一组学生添加到房间。当我尝试将集合添加到学生时, hibernate 没有保存它。在这里

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

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

最佳答案

在您的映射中,Room 是拥有方,Student 是拥有方。因此,您总是必须将学生添加到房间中,以便在房间和学生之间建立关系。即使您使用级联,以相反的方式进行也是行不通的。您将始终必须在 ORM 的关系中定义一个拥有方,并始终使用该方本身来创建关系。这link进一步阐明该主题。此外,如果您需要更深入地研究,您应该阅读 JPA/hibernate 文档。

关于java - 使用 @ManyToMany hibernate 并更新两种方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11812487/

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