1

部屋のクラスと学生のクラスの2つのクラスがあります。1つの部屋には多くの学生を含めることができますが、学生にも多くの部屋を含めることができます。したがって、私は@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>();
}

Room_Studentという1つのマッピングテーブルを使用したいので、Studentのコレクションを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/休止状態のドキュメントを参照する必要があります。

于 2012-08-04T22:56:31.363 に答える
0

Satadru に感謝します。Hibernate は別の方法では永続化されないため、マッピング ( MappedBy ) を削除する必要があり、両方とも

Student_Roomテーブルと Room_Studentテーブルが作成されます。これは、 Student_Roomのみではなく、Room が Students を所有し、Students が Rooms を所有していることを示しています。

それでも、OJB はこの機能をうまく機能させます。

于 2012-08-04T23:07:05.147 に答える