gpt4 book ai didi

java - 编写EnhancedUserType在Hibernate中保存类似字符串的信息,避免SQL注入(inject)

转载 作者:行者123 更新时间:2023-12-01 15:41:45 24 4
gpt4 key购买 nike

我有一些实体,例如地址。由于性能问题,我想将整个实体保存在单个字段中,例如“street;zip;city”。

可以创建一个EnhancedUserType来做到这一点。在一些示例中,我发现在 hibernate 源中,方法“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 所做的(或所做的)。

但我怀疑将这样的整个地址放在一列中是否会获得任何好处。并且您将无法查询地址的各个字段。您是否测量过这三个字段导致了性能问题,并将它们放在单个列中可以解决问题?

关于java - 编写EnhancedUserType在Hibernate中保存类似字符串的信息,避免SQL注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7933300/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com