Java 用fts转义Hibernate select查询中的特殊字符

Java 用fts转义Hibernate select查询中的特殊字符,java,hibernate,postgresql,Java,Hibernate,Postgresql,我有这样的疑问 Query query = session.createQuery("select object from EntityObject object where lower(object.columnName) like lower (E'%\\(test\\)%')"); 及 我试图用反斜杠转义搜索文本中的特殊字符,我使用postgres 8.3,标准字符串处于on状态。通过使用“E”,我得到的错误是 第一种情况下,第1行附近出现意外标记:“\(test\)%” 并在下一个案

我有这样的疑问

 Query query = session.createQuery("select object from EntityObject object where lower(object.columnName) like lower (E'%\\(test\\)%')");

我试图用反斜杠转义搜索文本中的特殊字符,我使用postgres 8.3,标准字符串处于on状态。通过使用“E”,我得到的错误是

第一种情况下,第1行附近出现意外标记:“\(test\)%”

并在下一个案例中获得以下错误

错误:tsquery中的语法错误:“测试(test)”


请帮我解决这个问题。我的意图是用反斜杠转义特殊字符,特别是括号“()”。

函数
lower
需要一个字符串作为参数<代码>E“%\\(test\\)%”不是有效字符串,因为开头没有单个的
<代码>'E%\\\(test\\)%'将是一个正确的字符串-虽然我想知道您想用它做什么,但在HQL和SQL中转义都不正确

like
语句中,只有两个特殊的通配符,
\uu
%
。如果要转义它们,必须定义转义字符

示例:选择名称以下划线开头的所有行

from YourTable where name like '!_%' escape '!'
如果您想在SQL中的任何地方转义
(不仅仅是
类似的
语句),那么您必须输入它两次

示例:选择名称为
Peter's

from YourTable where name = 'Peter''s'

为什么like子句在单引号外有一个“E”?我尝试转义特殊字符,因为这里指定了“如果应用程序希望将反斜杠视为转义字符,则应使用转义字符串语法。”你试过使用限制吗?没有,我没有试过使用限制,我想用这个方法。我想你需要在postgresql数据库中“设置标准字符串”。但我怀疑你能用编程的方式做到这一点。实际上,我正试图用括号“()”来转义,因为我试图用反斜杠来附加它,然后我想转义该字符串中的特殊字符。而你的代码“从你的表中,其中的名称像”!\u%'escape'!”——对我来说并没有获取结果。你不需要转义括号。它们在HQL
like
语句中没有任何特殊意义。是的,谢谢你的like,我们不需要转义括号,但在tsquery('english','testing(test)')=true中,我们需要正确的答案,对吗?你能告诉我在tsquery中怎么做吗?
tsquery
是Postgresql的一个特色。它既不是HQL,也不是标准SQL。可能是在HQL语句中使用时不起作用。使用
createSqlQuery()
而不是createQuery(),在这里您可以像在SQL中一样使用语法。您将失去到其他数据库的可移植性,但无论如何,使用tsquery时就是这样。
from YourTable where name = 'Peter''s'