如何摆脱'!' HQL中的符号

时间:2012-09-22 15:18:54

标签: java hibernate postgresql hql criteria

任何人都可以帮助逃避HQL中的NOT(!)符号。我正在使用Postgres 8.3。此外,我无法搜索这些字符| \?'()

fts('english',COLUMN_NAME,'" + searchText + "') = true)

1 个答案:

答案 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)。