用户与群组多对多删除问题,中间表要删除还有群组要删除,(相当于解散群),用户记录不变
-----------------------------------User.hbm.xml文件---------------------------
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.DonSoft.InstantChat.model.User" table="t_user">
<id name="userId" type="int">
<column name="userID" />
<generator class="native" />
</id>
<property name="employeeNo" type="string">
<column name="employeeNO" length="50" not-null="true" />
</property>
<property name="password" type="string">
<column name="password" length="50" not-null="true" />
</property>
<property name="name" type="string">
<column name="name" length="50" not-null="true" />
</property>
<property name="sex" type="string">
<column name="sex" length="20" not-null="true" />
</property>
<property name="age" type="java.lang.Integer">
<column name="age" />
</property>
<property name="role" type="string">
<column name="role" length="50" not-null="true" />
</property>
<property name="phone" type="string">
<column name="phone" length="50" />
</property>
<property name="address" type="string">
<column name="address" length="100" />
</property>
<set name="managers" inverse="true">
<key>
<column name="userID" />
</key>
<one-to-many class="com.DonSoft.InstantChat.model.Manager" />
</set>
<set name="groups" inverse="false" table="t_user_group" cascade="all" >
<key>
<column name="userID" />
</key>
<many-to-many class="com.DonSoft.InstantChat.model.Group">
<column name="groupID" />
</many-to-many>
</set>
<set name="positions" inverse="true" table="t_user_position" cascade="all">
<key>
<column name="userID" />
</key>
<many-to-many class="com.DonSoft.InstantChat.model.Position">
<column name="positionID" />
</many-to-many>
</set>
<set name="acceptMessages" inverse="true">
<key>
<column name="targetID" not-null="true" />
</key>
<one-to-many class="com.DonSoft.InstantChat.model.Message" />
</set>
<set name="sentMessages" inverse="true">
<key>
<column name="sourceID" not-null="true" />
</key>
<one-to-many class="com.DonSoft.InstantChat.model.Message" />
</set>
</class>
</hibernate-mapping>
-----------------------------Group.hbm.xml---------------------
<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
<hibernate-mapping>
<class name="com.DonSoft.InstantChat.model.Group" table="t_group">
<id name="groupId" type="int">
<column name="groupID" />
<generator class="native" />
</id>
<property name="groupName" type="string">
<column name="groupName" length="50" not-null="true" />
</property>
<property name="type" type="string">
<column name="type" length="50" not-null="true" />
</property>
<property name="placard" type="string">
<column name="placard" length="150" />
</property>
<set name="users" inverse="true" table="t_user_group" cascade="none" >
<key>
<column name="groupID" />
</key>
<many-to-many class="com.DonSoft.InstantChat.model.User">
<column name="userID" />
</many-to-many>
</set>
<set name="groupMessages" inverse="true">
<key>
<column name="groupID" />
</key>
<one-to-many class="com.DonSoft.InstantChat.model.Message" />
</set>
<one-to-one name="manager"></one-to-one>
<set name="positions" inverse="true">
<key>
<column name="departmentID" />
</key>
<one-to-many class="com.DonSoft.InstantChat.model.Position" />
</set>
</class>
</hibernate-mapping>
删除方法:
public void delGroup(Group group) {
Group groupInDB = this.getGroupByID(group.getGroupId());
Set<Position> positions = groupInDB.getPositions();
Manager manager = (Manager) this.getSession().createQuery(
"from Manager where group.groupId=?").setParameter(0,
groupInDB.getGroupId()).uniqueResult();
Set<User> users = groupInDB.getUsers();
if (users != null && users.size() > 0) {
for (Iterator<User> iterator = users.iterator(); iterator.hasNext();) {
User user = iterator.next();
if (manager != null) {
user.getManagers().remove(manager);
this.getHibernateTemplate().delete(manager);
}
user.getGroups().remove(groupInDB);
iterator.remove();
}
}
this.getHibernateTemplate().delete(groupInDB);
}