2011-06-22 37 views
1

我見過很多相關的問題,但他們都不是我的問題。休眠查詢轉義(來自Grails的GORM) - 再次

一般問題:確切地說明在Hibernate中事物是如何轉義的,特別是對於Grails GORM?

特殊問題:

我想執行此:

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

您可以注意到,在localeStr沒有逃脫,並列入字符串的另一個字符串。 如何可以用參數(類似於:參數)來避免這種情況?

謝謝。

回答

0

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

雖然,不好意思,不清楚 - 逃避什麼?你是否需要localeStr來包含一個參數,或者相反,以消除任何可能的參數?

刪除":""?"應該這樣做,至於我。儘管如此,將不信任的String直接連接到查詢中是一個好主意。

的最好方法消毒一個String參數就是,呃,它作爲一個參數傳遞:

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

findAll() doc

+0

你說得對,localeStr必須作爲參數傳遞。但不是那樣...其他方面。因爲:attrValue將被替換爲'my string',在這種情況下,它將變爲: 「extractValue(field,'// value [@ my_attribute ='my string']'」 可以看到,''不是正確的逃避角色。 – icvg