Hibernate 多对多 删除中间表。
首先我们先说一下。 我这里有个代码就多对多的,人员对部门(不要在这问题上发生疑问,什么数据库设计不好之类的,怎么人员和部门多对多,我这里声明,数据库设计没问题,具体需求不相赘述)。
给一个人员信息更新的代码。
public void updateUser() throws RtpServiceException {
// 存放基本属性
TbRtpUserEntity userEntity = userDAO.find(userDTO.getId());
try {
userEntity.setAdmin(userDTO.getAdmin());
userEntity.setUsername(userDTO.getUsername());
userEntity.setRealname(userDTO.getRealname());
if (!StringUtils.isBlank(userDTO.getPassword())) {
userEntity.setPassword(StringUtils.processPwd(userDTO
.getPassword()));
}
} catch (Exception e) {
throw new RtpServiceException();
}
// 删除部门
userEntity.getTbRtpDepartments().clear();
if (!StringUtils.isBlank(userDTO.getDepaCodes())) {
// 添加部门
String[] depaCodes = userDTO.getDepaCodes().split(",");
for (String depaCode : depaCodes) {
userEntity.addTbRtpDepartment(departmentDAO
.findDepaByCode(depaCode));
}
}
printMessage(message.setSuccessMessageInfo(_("UPDATE_SUCCESS")));
}
红色部分是关键。代码绝对没问题。中间由用户的hbm.xml维护,所以我userEntity.getTbRtpDepartments().clear();
能删除用户和部门之间的关系。。但是这个删除是一条一条的删除。语句是
delete tbl_user_depa where user_id_=? and depa_id_=?
delete tbl_user_depa where user_id_=? and depa_id_=?
delete tbl_user_depa where user_id_=? and depa_id_=?
...
(有多少个部门就执行多少条)
这个效率极低。因为我想要的是
delete tbl_user_depa where user_id_=?
不要 depa_id_=?
这样一条就搞定了。。希望谁讲解一下。谢谢