Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.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 org.postgresql.util.PSQLException:错误:WHERE的参数必须是布尔类型,而不是类型字符_Java_Spring_Postgresql_Spring Boot_Jpa - Fatal编程技术网

Java org.postgresql.util.PSQLException:错误:WHERE的参数必须是布尔类型,而不是类型字符

Java org.postgresql.util.PSQLException:错误:WHERE的参数必须是布尔类型,而不是类型字符,java,spring,postgresql,spring-boot,jpa,Java,Spring,Postgresql,Spring Boot,Jpa,我试图在SpringBoot中直接使用URL中指定的参数执行查询。 前。。。 在SpringBoot中,我将替换并形成一个PostgreSQL查询 那样 private List<Users> findByQuery(String query) { return entityManager .createNativeQuery("SELECT * FROM public.user where ? ", Users.class) .s

我试图在SpringBoot中直接使用URL中指定的参数执行查询。 前。。。 在SpringBoot中,我将替换并形成一个PostgreSQL查询 那样

private List<Users> findByQuery(String query) {
    return entityManager
           .createNativeQuery("SELECT * FROM public.user where ? ", Users.class)
           .setParameter(1, query)
           .getResultList();
}
SELECT * FROM public.user where username='test' AND City='london'
它基本上是实现服务器端过滤器,我们有6或7个

但我一直有以下错误

2018-08-29 10:55:45.832警告54751-[nio-8080-exec-1]o.h.engine.jdbc.spi.SqlExceptionHelper:SQL错误:0,SQLState:42804 2018-08-29 10:55:45.833错误54751-[nio-8080-exec-1]o.h.engine.jdbc.spi.SqlExceptionHelper:错误:WHERE的参数必须是布尔类型,而不是类型字符变化 职位:48 2018-08-29 10:55:45.849错误54751-[nio-8080-exec-1]o.a.c.c.c.[/].[dispatcherServlet]:路径[]上下文中Servlet[dispatcherServlet]的Servlet.service引发异常[请求处理失败;嵌套异常为javax.persistence.PersistenceException:org.hibernate.exception.sqlgrammareException:无法提取结果集]根本原因 org.postgresql.util.PSQLException:错误:WHERE的参数必须是布尔类型,而不是类型字符 职位:48


where子句中缺少字段名

改变

SELECT * FROM public.user where ?


我在这里找到了解决办法

  final String jpql = "SELECT * FROM user where " + filter;

    return entityManager
            .createNativeQuery(jpql, User.class)
            .getResultList();

查询必须是布尔值。它看起来不是。@BillyFrost,但当我硬编码时它工作正常..比如..SELECT*FROM public.user where username='test'..但当..SELECT*FROM public.user where?.时它会给我错误。你确定可以将where条件作为参数插入吗?当你必须直接插入sin时,会使用setParametergle值,如:SELECT*…WHERE NAME=?'@Innet它应该能够接受..如WHERE采用字符串条件查找某些内容I无法硬编码字段变量名称它需要来自url,因此需要动态形成查询..如在url中前端传递任何筛选器,并在co的WHERE子句中使用urlurse据我所知,整理完后,我认为动态where子句不允许这样做。用户名后应该有=等号。我可能会过滤并生成字符串过滤器。所以这不应该是个问题
  final String jpql = "SELECT * FROM user where " + filter;

    return entityManager
            .createNativeQuery(jpql, User.class)
            .getResultList();