You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hibernate 6中HQL DELETE语句的Query泛型类型选择问题

解决方案

针对Hibernate 6中的DELETE(或UPDATE)这类DML语句,你需要使用createMutationQuery方法替代废弃的createQuery,这类操作的Query泛型应为Long,因为执行后返回的是受影响的数据库行数。

正确代码示例

String hqlQuery = "DELETE from Node as o WHERE o.id IN (:ids)";
MutationQuery query = session.createMutationQuery(hqlQuery);
query.setParameterList("ids", nodeIdList, byte[].class);
// 执行删除并获取受影响行数
Long affectedRows = query.executeUpdate();

补充说明

  • createMutationQuery是Hibernate 6专门为DML(数据操作语言:DELETE、UPDATE、INSERT)操作设计的方法,返回的MutationQuery继承自Query<Long>,泛型Long对应当前操作影响的行数。
  • createSelectionQuery或带实体Class的createQuery仅适用于查询操作(SELECT),不支持DML语句,所以之前尝试Query<Node>会无效。
  • 若nodeIdList的元素类型已经明确是byte[],可以省略第三个参数byte[].class,简化为query.setParameterList("ids", nodeIdList);

内容的提问来源于stack exchange,提问作者Tito

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 05:52:05