我有一个m: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>();
编号DB休眠创造了我的表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(meeting);
编辑
好,我正确关闭会话。只有当我创建新对象时,一切都可以找到但是。当我想更新关联时,它不起作用。所以问题是。如何更新关联?
没有帮助。没有改变。这是从休眠调试:休眠:选择meetings0_.person_id作为person1_0_1_,meetings0_。MEETING_ID如meeting2_1_,meeting1_.meeting_id如meeting1_3_0_,meeting1_.duration如duration3_0_,meeting1_.meetingDate如meetingD3_3_0_,meeting1_.room如room3_0_从person_meeting上meetings0_.meeting_id = meeting1_.meeting_id其中meetings0_.person_id = meetings0_内加入会议meeting1_? 休眠:更新会议设定时间段= ?, meetingDate = ?,房=? meeting_id =? – Fixus
我认为实体WRE连接。如果你想让这些人坚持下去,你需要保存它们。 –
所有人员对象已经在数据库中。他们从名单挑选,使他们在生命周期中,他们用ID等 – Fixus