Grails 4调用executeUpdate搭配IN子句参数绑定出现类型转换错误
问题根因
- 使用参数绑定传入
IN子句的值时,Hibernate要求传入的参数是与目标字段类型匹配的集合对象,而非逗号拼接的字符串。你当前传入的rowId是String类型,Hibernate会尝试将整个字符串直接转换为id字段对应的Long类型,因此抛出java.lang.String cannot be cast to java.lang.Long异常。 - 字符串拼接的写法会直接把
100,101嵌入SQL语句,最终执行的SQL语法为in (100,101),符合数据库语法要求,所以可以正常运行。
修复方案
先将逗号分隔的ID字符串拆分为Long类型的集合,再传入参数即可,示例代码如下:
def rowId="100,101" // 拆分字符串并转换为Long类型集合 def ids = rowId.split(",").collect { it.toLong() } Image.executeUpdate("update Image set status='DELETED' where status='NEW' and id in (:ids)", [ids: ids])
内容的提问来源于stack exchange,提问作者NiBE
相关产品推荐
相关产品推荐

