任何人都可以幫助從HQL中的NOT(!)符號中逃脫。我正在使用Postgres 8.3。此外,我卻無法使用這些字符來搜索?| \'()如何逃離'!' HQL中的符號
fts('english',COLUMN_NAME,'" + searchText + "') = true)
任何人都可以幫助從HQL中的NOT(!)符號中逃脫。我正在使用Postgres 8.3。此外,我卻無法使用這些字符來搜索?| \'()如何逃離'!' HQL中的符號
fts('english',COLUMN_NAME,'" + searchText + "') = true)
你應該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();
這是相同的原則,使用與JDBC一個PreparedStatement
和設置參數(主要區別在於參數的索引從JDBC開始,1開始,HQL開始爲0。
我仍然收到以下錯誤。 原因:org.postgresql.util.PSQLException:錯誤:在tsquery中沒有操作數:「!」。 –
這是因爲您沒有將有效查詢傳遞給全文搜索。這是PostgreSQL問題,而不是Hibernate問題。無論如何,全文搜索通常會引起詞幹擾,因此標點符號將被刪除,您將無法將其包含在搜索中。也許你應該使用['to_tsquery()'](http://www.postgresql.org/docs/8.3/static/functions-textsearch.html)將你的搜索文本包裝成正確的查詢。 –
@RamarajKaruppusamy對於SQL注入,請參閱http://en.wikipedia.org/wiki/SQL_injection和http://bobby-tables.com/ –
對於FTS,它會起作用嗎? –
標題是誤導我猜。 –
您應該閱讀SQL注入指南並查看您的整個代碼庫。 https://www.owasp.org/index.php/SQL_Injection –