任何人都可以帮助逃避HQL中的NOT(!)符号。我正在使用Postgres 8.3。此外,我无法搜索这些字符| \?'()
fts('english',COLUMN_NAME,'" + searchText + "') = true)
答案 0 :(得分:3)
您应该binding搜索文本,而不是手动将其连接到查询。它不仅可以解决您的问题,而且在安全性(SQL注入)和性能方面也更好(数据库使用不同的参数查看相同的查询,这样可以在可能的情况下缓存已编译的查询)。 / p>
更改您的查询,使其如下所示:
fts('english', COLUMN_NAME, :searchText) = true // using named parameters
// or
fts('english', COLUMN_NAME, ?) = true // using positional parameters
然后,您可以正确绑定参数:
session.createQuery(hqlQuery)
.setString("searchText", searchText)
.iterate();
// or
session.createQuery(hqlQuery)
.setString(0, searchText)
.iterate();
与使用带有JDBC的PreparedStatement
和设置参数的原理相同(主要区别在于参数'索引从JDBC开始为1,而使用HQL开始为0)。