繁体   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