我在hibernate中有多对多的关系。 DB表是:hibernate中的多对多关系删除连接表数据?
events(event_id,name)
speaker(speaker_id,name)
event_speaker(event_id,speaker_id)
event.hbm.xml
<set name="speakers" table="event_speakers" cascade="save-update">
<key column="event_id"/>
<many-to-many class="com.manytomany.model.Speaker"/>
</set>
speaker.hbm.xml
<set name="events" table="event_speakers" cascade="save-update">
<key column="speaker_id"/>
<many-to-many class="com.manytomany.model.Event"/>
</set>
,我已经在Event.java实施.equals和hashCode方法和Speaker.java
Event.java
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
Event event = (Event)obj;
return this.id == event.id;
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return (int)id;
}
Speaker.java
@Override
public boolean equals(Object obj) {
// TODO Auto-generated method stub
Speaker speaker = (Speaker)obj;
return this.id == speaker.id;
}
@Override
public int hashCode() {
// TODO Auto-generated method stub
return (int)id;
}
这里是我的逻辑
session.beginTransaction();
Event event = (Event) session.createCriteria(Event.class).add(Restrictions.eq("id", 1L)).uniqueResult();
event.setSpeakers(new HashSet());
Speaker speaker = new Speaker();
speaker.setName("11");
Speaker speaker2 = new Speaker();
speaker2.setName("12");
event.getSpeakers().add(speaker);
event.getSpeakers().add(speaker2);
session.save(event);
session.getTransaction().commit();
当我运行上面的代码休眠为什么它是从加入删除正在执行这样
Hibernate: select this_.event_id as event1_0_0_, this_.event_name as event2_0_0_ from events this_ where this_.event_id=?
Hibernate: select max(speaker_id) from speakers
Hibernate: insert into speakers (speaker_name, speaker_id) values (?, ?)
Hibernate: delete from event_speakers where event_id=?
Hibernate: insert into event_speakers (event_id, elt) values (?, ?)
表,我想要插入新行而不是在连接表中删除。
问题是什么? – Pace
一个事件可以有多个发言者,一个发言者可以有很多事件。 所以我不得不每次都在连接表中插入一个新行,它与新事件正常工作,但是如果我想向现有事件添加新的扬声器,行将从连接表中删除并插入新扬声器。 我想插入新行删除现有的联接表 –