代码之家  ›  专栏  ›  技术社区  ›  Ramaraj Karuppusamy

如何逃离“!”HQL中的符号

  •  0
  • Ramaraj Karuppusamy  · 技术社区  · 13 年前

    请任何人帮助逃离HQL中的NOT(!)符号。我使用的是Postgres 8.3。此外,我无法使用这些字符进行搜索|\?'()

    fts('english',COLUMN_NAME,'" + searchText + "') = true)
    
    1 回复  |  直到 13 年前
        1
  •  3
  •   Frank Pavageau    13 年前

    你应该 binding 搜索文本,而不是手动将其连接到查询。它不仅解决了您的问题,而且在安全性(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();
    

    这与使用 PreparedStatement JDBC和设置参数(主要区别在于JDBC的参数索引从1开始,HQL的参数索引为0)。