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'!”——对我来说并没有获取结果。你不需要转义括号。它们在HQLlike
语句中没有任何特殊意义。是的,谢谢你的like,我们不需要转义括号,但在tsquery('english','testing(test)')=true中,我们需要正确的答案,对吗?你能告诉我在tsquery中怎么做吗?tsquery
是Postgresql的一个特色。它既不是HQL,也不是标准SQL。可能是在HQL语句中使用时不起作用。使用createSqlQuery()
而不是createQuery(),在这里您可以像在SQL中一样使用语法。您将失去到其他数据库的可移植性,但无论如何,使用tsquery时就是这样。
from YourTable where name = 'Peter''s'