循环遍历hql中的数组?

时间:2014-10-01 09:40:40

标签: arrays grails groovy

我有一个id数组,我想在更新查询中循环。我尝试了几种方法,但遇到了一些错误。

hql = """UPDATE items
                 SET nOrder = CASE id
                """
        //l1 is the list of ids.
        for(int i = 0; i <= l1.size(); i++) {
            hql += "\n WHEN ${l1[i]} THEN ${i}"
        }
        hql += "\n END"
        hql += "\n WHERE id IN (:id)"
        Items.executeUpdate(hql,[id: l1])

即使我尝试过这样的错误。

  for(int i = 0; i <= l1.size(); i++) {
            Items.executeQuery("UPDATE Items SET nOrder = CASE id WHEN ${l1[i]} THEN ${i}  END WHERE id IN (:id)",[id: l1])
}

错误消息。

期待“然后”,在第1行第61列附近找到','UPDATE org.items SET nOrder = CASE id WHEN 2,1 THEN 0 END WHERE id IN(:id)]

任何人都可以让我知道我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

您正在从(用户提供的?)字符串构建SQL,这是一个可怕的想法。错误归结为:WHEN 2,1 THEN 0,这是无效的SQL(请注意那里的,)。你很可能在${l1[i]}中将一些浮点数存储为字符串,或者使用语言环境运行,其中数字用,等分隔。你应该使用param替换(就像你已经为{{1}做的那样}})也在所有其他地方(没有:id${l1[i]})。 E.g:

$i