HQL の NOT(!) 記号からの脱出を助けてください。Postgres 8.3 を使用しています。また、これらの文字で検索できません |\?'( )
fts('english',COLUMN_NAME,'" + searchText + "') = true)
HQL の NOT(!) 記号からの脱出を助けてください。Postgres 8.3 を使用しています。また、これらの文字で検索できません |\?'( )
fts('english',COLUMN_NAME,'" + searchText + "') = true)
検索テキストを手動でクエリに連結するのではなく、バインドする必要があります。問題を解決するだけでなく、セキュリティ (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 から始まることです)。