【问题标题】:HibernateTemplate bulkUpdate using IN - clauseHibernateTemplate bulkUpdate using IN - 子句
【发布时间】:2014-11-09 01:43:13
【问题描述】:

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

引起:org.hibernate.QueryParameterException:位置超出 声明的序数参数的数量。记住那个序数 参数是从 1 开始的!位置:2

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

如何通过用户列表作为参数来实现这个批量更新操作???

【问题讨论】:

  • 你可以试试.. HibernateTemplate.bulkUpdate("更新地址地址set address.city = 'Oakland' where address.user in (?)", users);
  • 我也试过这个,它抛出“ org.springframework.orm.hibernate3.HibernateSystemException: IllegalArgumentException 发生调用 getter of user.id; 嵌套异常是 org.hibernate.PropertyAccessException: IllegalArgumentException 发生调用 getter 用户.id"
  • 哦,看起来你的 POJO 不合适。使用字段 id 检查您的用户 Pojo 的 getter setter。但我认为到目前为止,您可能已经得到了答案。
  • 感谢 Ketan 的回复。仍然被这个问题困扰..我还没有得到答案:(请帮助我如何解决这个问题???
  • 是的。正如我之前提到的,您的 POJO 看起来不合适。使用字段 id 检查您的用户 Pojo 的 getter setter。

标签: java spring hibernate bulkupdate


【解决方案1】:

这个问题可能与why-this-hibernate-template-bulkupdate-doesnt-work重复

回答上述问题可能会解决这个问题。希望能帮助到你。快乐学习:)

【讨论】:

    【解决方案2】:

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

    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());
    

    【讨论】:

      猜你喜欢
      • 2012-03-05
      • 1970-01-01
      • 1970-01-01
      • 2010-12-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-14
      • 2012-01-26
      相关资源
      最近更新 更多