0

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

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

1 回答 1

3

您应该绑定搜索文本,而不是手动将其连接到查询。它不仅解决了您的问题,而且在安全性(SQL 注入)和性能方面也更好(数据库看到具有不同参数的相同查询,这允许它尽可能缓存已编译的查询)。

更改您的查询,使其看起来像:

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 开始)。

于 2012-09-22T15:46:06.747 回答