Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何逃离'';HQL中的符号_Java_Hibernate_Postgresql_Hql_Criteria - Fatal编程技术网

Java 如何逃离'';HQL中的符号

Java 如何逃离'';HQL中的符号,java,hibernate,postgresql,hql,criteria,Java,Hibernate,Postgresql,Hql,Criteria,任何人都可以帮助摆脱HQL中的NOT(!)符号。我正在使用Postgres 8.3。此外,我无法使用这些字符搜索() 您应该选择搜索文本,而不是手动将其连接到查询。它不仅解决了您的问题,而且在安全性(SQL注入)和性能方面也更好(数据库使用不同的参数查看相同的查询,这允许它在可能的情况下缓存已编译的查询) 更改查询,使其看起来像: fts('english', COLUMN_NAME, :searchText) = true // using named parameters // or fts

任何人都可以帮助摆脱HQL中的NOT(!)符号。我正在使用Postgres 8.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开始)。

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

我想这个标题是误导性的。您应该阅读SQL注入指南并查看整个代码库。我想这个标题是有误导性的。你应该阅读一本关于SQL注入的指南,并回顾一下你的整个代码库。我仍然得到以下错误。原因:org.postgresql.util.PSQLException:错误:tsquery:“!”中没有操作数。这是因为您没有将有效查询传递给全文搜索。这是PostgreSQL问题,不是Hibernate问题。全文搜索通常会进行词干分析,因此标点符号将被删除,您将无法将其包含在搜索中。也许您应该使用将搜索文本包装到正确的查询中。@RamarajkarupusAMY For SQL injection请参阅,我仍然收到以下错误。原因:org.postgresql.util.PSQLException:错误:tsquery:“!”中没有操作数。这是因为您没有将有效查询传递给全文搜索。这是PostgreSQL问题,不是Hibernate问题。全文搜索通常会进行词干分析,因此标点符号将被删除,您将无法将其包含在搜索中。也许您应该使用将搜索文本包装成正确的查询。@RamarajkarupusAMY For SQL injection请参阅和