在 HQL 中使用 NOT IN 子句删除



我有一个表issue_assigned user_id为整数,发行号为Varchar。可以将问题分配给多个用户。

现在有一个条件,如果问题之前分配给 3 个用户,然后管理员只想将其分配给 2 个用户,系统应该删除我写的以下代码的第 3 个用户条目

String hql = "delete from issueAssigned  where issueNumber=:issueNum AND assignedToUserId not in (:userIds)";
Query query = getHibernateTemplate().getSessionFactory().getCurrentSession().createQuery(hql);
query.setParameter("issueNum", issueNum);
query.setParameter("userIds", userIds);
if(query.executeUpdate() > 0){
    return "success";
}else{
    return "error";
}

userIds 是一个字符串,其中包含由逗号(,(分隔的用户 ID。执行时,我得到字符串不能被命名为整数错误。

如何保留所需的用户并删除其余用户?我将必须进行哪些更改?

userIds 是一个字符串,其中包含由逗号(,( 分隔的 userId

不应该。您应该只传递一个数组或用户 ID 集合。Hibernate将通过为每个用户ID添加一个参数占位符来为您创建相应的SQL准备语句。

也不需要:userIds周围的括号。

而不是

只接受一个参数的setParameter,你必须使用setParameterList它接受参数集合而不是字符串

query.setParameterList("userIds", userIds);

您的查询将是

String hql = "delete from issue_assigned  where issue_number=:issueNum AND assigned_to_user_id not in :userIds";

并使用 query.setParameterList 如下

 query.setParameterList("userIds", userIds);

Hibernate 将使用传递的集合创建预准备语句。

最新更新