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 我想在一个软件里添加一个优惠弹窗,应该怎么写代码
  • ¥15 fluent的在模拟压强时使用希望得到一些建议
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样
  • ¥15 java的GUI的运用
  • ¥15 Web.config连不上数据库
  • ¥15 我想付费需要AKM公司DSP开发资料及相关开发。
  • ¥15 怎么配置广告联盟瀑布流