我正在尝试在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
答案 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