HibernateTemplate bulkUpdate使用IN - 子句

时间:2014-09-15 13:46:53

标签: java spring hibernate bulkupdate

如何使用hibernateTemplate执行bulkUpdate操作。以下代码抛出

  

引起:org.hibernate.QueryParameterException:位置超出   声明的序数参数的数量。请记住,序数   参数是基于1的!位置:2

HibernateTemplate.bulkUpdate("update Address address set address.city = 'Oakland' where address.user in (:users)", users);

如何通过将用户列表作为参数传递来实现此批量更新操作???

1 个答案:

答案 0 :(得分:0)

它非常奇怪,我搜索了很多但也找不到解决方案,文档说它是绑定数值的“?”查询字符串中的参数但是当我提供list作为参数时 - 它不作为字符串绑定IN子句。所以我做了一个解决方法 - 提供参数为String:

StringBuilder inClauseparams = new StringBuilder("(");
    for (int i = 0; i < notificationIDs.size(); i++) {
        inClauseparams.append(""+notificationIDs.get(i));
        if( i != notificationIDs.size()-1 )
            inClauseparams.append(",");
        else
            inClauseparams.append(")");
    }
    hibernateTemplate.bulkUpdate("update Notification set isSeen = true where id in "+inClauseparams.toString());