wenlong7610 2010-07-30 17:02
浏览 510
已采纳

Query语句实现级联批量删除

问题是这样的
现在有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语句实现批量删除有关联的数据

  • 写回答

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记
  • ¥15 保护模式-系统加载-段寄存器
  • ¥15 电脑桌面设定一个区域禁止鼠标操作
  • ¥15 求NPF226060磁芯的详细资料