【问题标题】:Hibernate Query Escaping (from Grails' GORM) - againHibernate Query Escaping(来自 Grails 的 GORM)——再次
【发布时间】:2011-09-20 08:15:11
【问题描述】:

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

一般性问题:在 Hibernate 中,特别是 Grails GORM 中的转义方式具体在哪里指定?

特殊问题:

我想执行这个:

"WHERE extractValue(field, '//value[@my_attribute=\""+localeStr+"\"]')"

你可以注意到,localeStr 没有被转义,而是包含在另一个字符串中。 如果可能的话,如何使用参数(类似 :parameter)来避免这种情况?

谢谢。

【问题讨论】:

    标签: hibernate grails escaping


    【解决方案1】:

    Here, I believe, in "bind parameters" section。加上一般的 Groovy 转义。

    不过,抱歉,不清楚 - 逃避什么?您是否需要localeStr 包含一个参数,或者相反,以清除任何可能的参数?

    对于我来说,删除 ":""?" 应该可以。不过,无论如何,将不受信任的String 直接连接到查询中是个坏主意。

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

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

    findAll() doc

    【讨论】:

    • 你是对的,localeStr 必须作为参数传递。但不是那种方式......其他方式。因为 :attrValue 将被替换为 'my string' 之类的东西,在这种情况下,它将变为: "extractValue(field, '//value[@my_attribute='my string']'" 你怎么看, '' 不是正确的转义字符。
    猜你喜欢
    • 1970-01-01
    • 2013-01-23
    • 1970-01-01
    • 2014-03-13
    • 2011-09-17
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    • 1970-01-01
    相关资源
    最近更新 更多