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

JPA批量删除报错Update/delete queries cannot be typed如何解决

异常原因

JPA规范明确要求UPDATE、DELETE类型的批量操作查询仅返回受影响的行数,不返回实体对象,因此不能调用指定实体类返回类型的createQuery方法生成TypedQuery对象,这就是抛出Update/delete queries cannot be typed异常的根本原因。

正确实现代码
// JPA 3.0+ 版本导包
import jakarta.persistence.Query;
// 低版本JPA替换为 import javax.persistence.Query;

public void deleteByIds(List<Integer> ids) {
    String hql = "delete from " + OnboardingTasks.class.getName() + " e WHERE e.id IN :ids";
    // 不指定返回实体类型,创建普通Query对象即可
    Query query = entityManager.createQuery(hql);
    query.setParameter("ids", ids);
    // executeUpdate返回本次操作实际删除的行数,可根据业务需要做合法性校验
    int deletedCount = query.executeUpdate();
}
可选优化说明
  • 可以对返回的deletedCount做校验,比如和传入的ids集合大小做比对,判断是否存在无效ID未被删除的情况
  • 传入的ID列表如果长度过大,建议分批执行删除,避免SQL长度超出数据库限制

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 12:45:03