org.postgresql.util.PSQLException:错误:语法错误在或附近")"

时间:2016-08-10 15:31:00

标签: java postgresql hibernate

这是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();
}

2 个答案:

答案 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