【发布时间】:2018-05-10 17:51:41
【问题描述】:
我们的 Web 应用程序中有一个搜索功能,它使用 Oracle(版本在 Oracle10g 之后),我正在使用 Java 构建 SQL 查询。
根据documentation,您在curly braces {..} 中输入的任何内容都会被转义。但是,我也想提供对 { 的搜索,当我尝试搜索包含 { 的字符串时,它给了我一个 org.hibernate.QueryException: Unmatched braces for alias path 错误,因为它会查找右大括号。
到目前为止我已经尝试过什么;
...query... WHERE ... LIKE lower('%{{%') ESCAPE '{'
...query... WHERE ... LIKE lower('%\{%') ESCAPE '\'
...query... WHERE ... LIKE lower('%{{}%')
...query... WHERE ... LIKE lower('%CHR(123)%')
...query... WHERE ... LIKE lower('%||CHR(123)||%')
前两个仍然导致错误。其他的不会导致任何错误,但它们不会返回包含{ 的结果。这种情况有什么解决办法吗?
PS:我不能使用准备好的语句,因为查询有图例部分。不幸的是,它必须使用字符串手动构建。
PS2:右大括号}没有问题
【问题讨论】:
-
CHR(123)应该是这样的:LIKE '%' || CHR(123) || '%'。你在这里绝对不需要LOWER()。 -
@David,这个效果非常好。看起来是一个更丑陋的解决方案,但我想我现在会使用它。你周围有没有其他工作知道这种情况?
-
不,我以前从未见过或听说过这个问题(但我不使用 Hibernate)