簡體   English   中英

編寫EnhancedUserType以便在Hibernate中保存類似字符串的信息,從而避免SQL注入

[英]Writing EnhancedUserType for saving String alike information in Hibernate, avoiding SQL-Injection

我有一些實體,例如地址。 由於性能問題,我想將整個實體保存在一個單獨的字段中,例如“ street; zip; city”。

可以創建EnhancedUserType來做到這一點。 在我發現的一些示例中以及在休眠源中,始終像這樣實現“ objectToSQLString”方法:

@Override
public String objectToSQLString(Object object) {
    if (object != null) {
        Address oo = (Address)object;
        return "'" + oo.toSomeString() + "'";
    } else {
        return "";
    }       
}

我不理解該方法是否返回SQL表示形式。 為什么特殊符號(例如['])沒有在字符串內轉義? 我應該如何逃脫它們? 轉義的標准SQL方式是[']-> [''],但在某些方言中,也必須轉義[反斜杠]。

是否有一些Hibernate實用程序,可以依靠方言為我進行轉義? Hibernate本身如何解決這個問題? 我在源代碼中找不到它:-(

實際上,您必須返回一個SQL文字字符串,該字符串用單引號引起來,並且內部范圍已轉義。 AFAIK,只需將單引號加倍即可將其轉義: 'O''Reilly' 至少那是apache commons-lang StringEscapeUtils所做的事情。

但是我懷疑您將這樣的整個地址放在一欄中會不會獲得任何收益。 而且您將失去查詢地址的各個字段的可能性。 您是否測量過這三個字段導致了性能問題,並且將它們放在同一列中可以解決此問題?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM