Hibernate查询转义(来自Grails的GORM)-再次

Hibernate查询转义(来自Grails的GORM)-再次,hibernate,grails,escaping,Hibernate,Grails,Escaping,我见过很多相关的问题,但都不是我的问题 一般问题:在Hibernate中,具体在哪里指定了如何转义对象,特别是Grails GORM 具体问题: 我想执行以下操作: "WHERE extractValue(field, '//value[@my_attribute=\""+localeStr+"\"]')" 您可以注意到,localeStr不是转义的,而是包含在另一个字符串字符串中。 如果可能的话,我该如何使用类似于:parameter的参数来逃避这个问题 谢谢。。加上一般的Groovy转义

我见过很多相关的问题,但都不是我的问题

一般问题:在Hibernate中,具体在哪里指定了如何转义对象,特别是Grails GORM

具体问题:

我想执行以下操作:

"WHERE extractValue(field, '//value[@my_attribute=\""+localeStr+"\"]')"
您可以注意到,localeStr不是转义的,而是包含在另一个字符串字符串中。 如果可能的话,我该如何使用类似于:parameter的参数来逃避这个问题

谢谢。

。加上一般的Groovy转义

不过,对不起,还不清楚-逃避什么?您是否需要localeStr来包含参数,或者需要相反的参数来清除任何可能的参数

删除:和?我也应该这样做。不过,无论如何,将不受信任的字符串直接连接到查询中是个坏主意

清理字符串参数的最佳方法是,呃,将其作为参数传递:

DomainClass.findAll(
   "WHERE extractValue(field, '//value[@my_attribute=:attrValue]',
   [attrValue: localeStr])")

请参阅。

您是对的,localeStr必须作为参数传递。但不是那样。。。不知怎么的。因为:attrValue将被替换为类似“my string”的内容,在该上下文中,它将成为:extractValuefield,//value[@my_attribute='my string']”,并且您可以看到,这些不是正确的转义字符。