我有:n 关系 beetwen 对象(会议、人员),因为许多人可以参加许多会议。
我已经这样设置了
会议
@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_participants:meeting_id、person_id。酷,正如我所愿。现在有问题的案例。我创建了会议对象并将其保存到数据库。比我创建一组用户,我将它添加到会议中
this.saveMeeting.setParticipants(set);
休眠显示:
Hibernate: update Meeting set duration=?, meetingDate=?, room=? where meeting_id=?
没有任何东西添加到关联中。我需要改变什么?
// 编辑我已经更改了字段的会议定义
@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(会议);
编辑
好的,我已经正确关闭了会话。一切正常,但只有在我创建新对象时才能找到。当我想更新关联时,它不起作用。所以问题是。如何更新关联?