多くの人が多くの会議の参加者になることができるので、私はオブジェクト (会議、人) 間に関係があります。
このように設定しました
ミーティング
@ManyToMany(mappedBy = "meetings")
protected Set<Person> participants = new HashSet<Person>();
人
@ManyToMany(cascade = {CascadeType.ALL})
@JoinTable(name = "person_meeting",
joinColumns = {@JoinColumn(name = "person_id")},
inverseJoinColumns = {@JoinColumn(name = "meeting_id")}
)
protected Set<Meeting> meetings = new HashSet<Meeting>();
Id DB hibernate は、meeting_id、person_id の 2 つのフィールドを持つテーブル meeting_participants を作成しました。かっこいい、思った通り。今問題のケース。Meeting オブジェクトを作成し、DB に保存しました。ユーザーのセットを作成するよりも、会議に追加します
this.saveMeeting.setParticipants(set);
ハイバネート表示:
Hibernate: update Meeting set duration=?, meetingDate=?, room=? where meeting_id=?
関連付けには何も追加されません。何を変更する必要がありますか?
// EDIT フィールドのミーティング定義で変更しました
@ManyToMany(mappedBy = "meetings", cascade = {CascadeType.ALL})
protected Set<Person> participants = new HashSet<Person>();
今、私はエラーが発生します
org.hibernate.HibernateException: Illegal attempt to associate a collection with two open sessions
この方法にあります
public static Long add(Meeting meeting) {
SessionFactory sf = null;
Session session = null;
sf = HibernateUtil.getSessionFactory();
session = sf.openSession();
session.beginTransaction();
try{
session.save(meeting);
session.getTransaction().commit();
session.flush();
} catch(HibernateException e){
session.getTransaction().rollback();
e.printStackTrace();
return new Long(-1);
}
session.close();
return meeting.getId();
}
問題の原因となっている行は次のとおりです。
session.save(会議);
編集
OK、セッションを適切に閉じました。すべてが機能しますが、新しいオブジェクトを作成している場合にのみ見つかります。関連付けを更新したいのですが、うまくいきません。そこで質問です。関連付けを更新するには??