HQL语句,如何同时删除多行记录?

squallffx 2008-04-30 10:49:16
数据库为MYSQL 5
我是Hibernate的新手

想进行多条记录的删除,在MYSQL 5 中可以这样实现的语句

delete from channels where id in (1,2,3)

如何在Hibernate中用hql语句实现?

我试过这样:
public void deleteChannel(String channelID){
String hql="DELETE Channels WHERE id in (?)";
Query q = this.session.createQuery(hql);
q.setString(0, channelID);
q.executeUpdate();
this.session.beginTransaction().commit();
}

deleteChannel("1,2,3")
但只能删除id为1的记录,不能实现三条记录全部删除!是不是我写错了??恳请各位帮帮我。


不好意思,我没有多少分可给。
...全文
599 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianyidan 2008-05-04
  • 打赏
  • 举报
回复
我也建议用jdbc!
tianyidan 2008-05-04
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 java2000_net 的回复:]
squallffx (squall) 在CSDN社区共有可用分:870, 已花费可用分:45, 剩余可用分:825

你有825分,竟然哭穷!


算了,建议你
1 逐个删除还了,而且hibernate支持批量删除,Batch 的!性能也很好!
2 使用NativeQuery 吧!

[/Quote]
无语了……
commanager 2008-05-04
  • 打赏
  • 举报
回复
分数变成110了
老紫竹 2008-05-03
  • 打赏
  • 举报
回复
竟然还不结贴。

列表乱了,顶起来!
nanjg 2008-05-01
  • 打赏
  • 举报
回复
hibernate本身API去做批量删除更新都是不推荐的 或者用调存储过程的办法也是可行的

tx = session.beginTransaction();
Connection con=session.connection();

String procedure = "{call batchUpdateCustomer(?) }";
CallableStatement cstmt = con.prepareCall(procedure);
cstmt.setInt(1,0);
cstmt.executeUpdate();
tx.commit();

nanjg 2008-05-01
  • 打赏
  • 举报
回复
批量删除的话建议用jdbc
squallffx 2008-05-01
  • 打赏
  • 举报
回复
其实我不知道有多少分的,因为我已经有很久没有关注分数的,所以我认为我自己有很少分,真不好意思,可以的话,我会改得分
panxuan 2008-05-01
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 java2000_net 的回复:]
squallffx (squall) 在CSDN社区共有可用分:870, 已花费可用分:45, 剩余可用分:825

你有825分,竟然哭穷!


算了,建议你
1 逐个删除还了,而且hibernate支持批量删除,Batch 的!性能也很好!
2 使用NativeQuery 吧!
[/Quote]
你有825分,竟然哭穷!
在斑竹面前千万不好这样说,晕死我了。
Shine_Panda 2008-05-01
  • 打赏
  • 举报
回复
可用分:825
才给 10 分啊!!!
老紫竹 2008-05-01
  • 打赏
  • 举报
回复
squallffx (squall) 在CSDN社区共有可用分:870, 已花费可用分:45, 剩余可用分:825

你有825分,竟然哭穷!


算了,建议你
1 逐个删除还了,而且hibernate支持批量删除,Batch 的!性能也很好!
2 使用NativeQuery 吧!
Shine_Panda 2008-05-01
  • 打赏
  • 举报
回复
事实上你的 channelID 是 int 类型的。
当你 把一个字符串 "1,2,3" 传入的时候.
你的hql 会被解析为:

delete from changels where id in ('1,2,3')
我也不晓得这样为什么会把 id 为1 的删除.

但是 hibernate 在批处理的时候是没有jdbc好的.
所以象这种逻辑一般直接用 createSQLQuery 处理比较好。
lifeiping 2008-05-01
  • 打赏
  • 举报
回复
不好意思,写快了!!!
lifeiping 2008-05-01
  • 打赏
  • 举报
回复
public void deleteChannel(Object... channelID){
if(channelID==null)return;
StringBuilder str=new StringBuilder("delete from Channels wher id in (?");
for(int i=1;i<channelID.length;i++){
str.append(",?");
}
str.append(")");
Query q = this.session.createQuery(hql);
for(int i=0;i<channelID.length;i++){
q.setString(i+1,channelID[i].toString());
}
q.executeUpdate();
this.session.beginTransaction().commit();
}

67,549

社区成员

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

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