这是DAO方法我必须从DB中检索学生列表,并在RunTime上说 -
这让我发疯了。谁能告诉我我可能错过了什么?org.postgresql.util.PSQLException:错误:语法错误在或附近")"
public List<Student> getStudentsByIds(List<Integer> studentIds) {
Session session = SessionFactoryUtils.getSession(getSessionFactory(), true);
SQLQuery query = session.createSQLQuery("SELECT * FROM students s WHERE s.id IN (:studentIds)");
query.setParameterList("studentIds", studentIds);
return query.list();
}
答案 0 :(得分:1)
可能studentIds
是一个空列表,postgres不接受
生成的代码中的空IN子句
select
...
where
students.id in (
)
答案 1 :(得分:0)
最近有此问题。因此,正如我从文档中获取的那样,psql无法处理IN/NOT IN (:someEmptyList)
语句中的空列表,这会导致criteriaBuilder将空花括号添加到最终的sql查询中:(in ())
恕我直言,最简单的解决方案是检查空列表并将空结果列表返回。
或者如果您有复杂的查询并且确实需要它,请使用更高级的工具=> https://marcelothebuilder.github.io/java/jpa/2017/09/11/jpa-post.html