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

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

    点赞 打赏 评论
  • iteye_2443 2010-07-30 17:16

    先删字表记录再删主表记录。。问题是你一次要删多啊少主表记录?一条还是N条?。。两条sql应该能解决啊

    点赞 打赏 评论

相关推荐 更多相似问题