问题是这样的
现在有3张表 A 为用户表 B为职位表 C是中间表里面只有两列存放用户ID和职位ID是个复合主键 要求是能批量删除用户表,并且同时要删除中间表中相应的记录,而且只能用一条Query语句,我在A表的映射文件中配置了cascade="delete" Query代码如下:
String hql = "delete from A where A.id in(1,2,3)";
Query q = session.createQuery(hql);
int result = q.executeUpdate();
该段代码只能批量删除没有外键关联的数据,但是有外键的一删除就报错,
后来我用了HibernateDaoSupport类的delete方法,能删除有外键的数据,但是每次只能删除一条,于是我有写了个循环,能批量删,但是不符合题目的要求。。。。
请问要如何只用一条Query语句实现批量删除有关联的数据
Query语句实现级联批量删除
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- iteye_2443 2010-07-31 09:02关注
那两条sql吧。。我知道的就是两条sql处理。。第一条删外键,第二条删主表记录
delete from 子表table where 外键 in(fid1,fid2,...);
delete from 主表table where 主键 in(id1,id2,...);
两条可以搞定啊。。关键看你怎么构造这个sql。。
我是通过for循环构造
String [] ids ;//你要删除的记录对应的主键
StringBuffer fSql = new StringBuffer();
StringBuffer sql = new StringBuffer();
fsql.append("delete from ftable where fid in(");
sql.append("delete from table where id in(");
for(String id : ids){
fsql.append(id+",");
sql.append(id+",");
}
//随手写的。。你要对两条删除",",然后加上")",我不记得了。。反正StringBuffer有这个方法的。。在IDE下能点出来。。
sql构造好就先后执行了。。
我这里是原生的sql。。你也可以尝试用hql本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报
悬赏问题
- ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
- ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
- ¥20 有关区间dp的问题求解
- ¥15 多电路系统共用电源的串扰问题
- ¥15 slam rangenet++配置
- ¥15 有没有研究水声通信方面的帮我改俩matlab代码
- ¥15 ubuntu子系统密码忘记
- ¥15 保护模式-系统加载-段寄存器
- ¥15 电脑桌面设定一个区域禁止鼠标操作
- ¥15 求NPF226060磁芯的详细资料