Hibernate 多对多 删除中间表。

我其实很低调 2010-07-14 02:01:30
首先我们先说一下。 我这里有个代码就多对多的,人员对部门(不要在这问题上发生疑问,什么数据库设计不好之类的,怎么人员和部门多对多,我这里声明,数据库设计没问题,具体需求不相赘述)。

给一个人员信息更新的代码。

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_=?
这样一条就搞定了。。希望谁讲解一下。谢谢
...全文
547 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
huiccsu525 2010-08-17
  • 打赏
  • 举报
回复
用这样一句就行了:userEntity.setTbRtpDepartments(null);
我其实很低调 2010-07-15
  • 打赏
  • 举报
回复
我希望可以在配置文件里面解决。。。有人知道没???
valen_jia 2010-07-15
  • 打赏
  • 举报
回复
一个人居然还可以多个部门,你们的客户NB啊

直接写sql改就好了,用sqlquery接口
longjayhc 2010-07-15
  • 打赏
  • 举报
回复
得到Set<user>,去掉想删除数据对应的user ,重新给部门的Set<user> 赋值
mndn_nana 2010-07-15
  • 打赏
  • 举报
回复
搜索关键字:hibernate 批量删除
macower 2010-07-14
  • 打赏
  • 举报
回复
考虑下HQL直接删除

删除之后调用下

session.flush();
session.refresh();
以保证同步
yimail 2010-07-14
  • 打赏
  • 举报
回复
hhhhhhhhhhhhhhhh
zhangfeng275265586 2010-07-14
  • 打赏
  • 举报
回复
看不懂
kString 2010-07-14
  • 打赏
  • 举报
回复
hibernate 面向对象 删除就是这么删的。
和对应关系没关系。你删1个表的数据也这样。

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧