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
相关产品推荐
相关产品推荐

