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

时间:2018-08-29 10:12:34

标签: java spring postgresql spring-boot jpa

我正在尝试在Spring Boot中直接使用URL中指定的参数执行查询。 前-http://localhost:8080/users?username=test&city=london& ... 在Spring Boot中,我将替换并形成一个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 WARN 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] oaccC [。[。[/]。[dispatcherServlet]:Servlet [dispatcherServlet]的Servlet.service()路径[]引发异常[请求处理失败;嵌套的异常是javax.persistence.PersistenceException:org.hibernate.exception.SQLGrammarException:无法提取ResultSet]的根本原因   org.postgresql.util.PSQLException:错误:WHERE的参数必须为布尔型,而不能改变字符类型     位置:48

2 个答案:

答案 0 :(得分:0)

您在where子句中缺少字段名称。

更改

SELECT * FROM public.user where ?

SELECT * FROM public.user where username = ? 

答案 1 :(得分:0)

我在这里找到了解决方法

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

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

http://shazsterblog.blogspot.com/2017/01/spring-data-jpa-with-dynamic-where.html