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 で a を使用してパラメーターを設定するのと同じ原理PreparedStatementです (主な違いは、パラメーターのインデックスが JDBC では 1 から始まり、HQL では 0 から始まることです)。

于 2012-09-22T15:46:06.747 に答える