使用fts在Hibernate选择查询中转义特殊字符

时间:2013-04-30 04:25:52

标签: java hibernate postgresql

我有这样的查询

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

Query query = session.createQuery("select object from EntityObject object where fts('english',contact.searchColumn,'testing (test)') = true;

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

  

意外标记:第一种情况下第1行附近的'%\(test \)%'

并在下一个案例中低于错误

  

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

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

1 个答案:

答案 0 :(得分:3)

函数lower期望字符串作为参数。 E'%\\(test\\)%'不是有效字符串,因为开头没有单个''E%\\(test\\)%'将是一个正确的字符串 - 我想我想知道你想用它做什么,在SQL中也不能正确地逃避HQL。

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

示例:选择名称以下划线_

开头的所有行
from YourTable where name like '!_%' escape '!'

如果你想在SQL中的任何地方转义'(不仅是like语句),那么你必须输入两次。

示例:选择名称为Peter's

的行
from YourTable where name = 'Peter''s'