当我在SQL IN参数中设置一个空集时,我的代码会导致 SQLGrammarException :

Query query = this.entMngr.createNativeQuery("SELECT foo_id, first, last FROM foo WHERE bar IN :barSet");
//barSet is a Set<Integer>
query.setParameter("barSet", barSet);
//this throws exception
List<Object> nativeList =  query.getResultList();

集合不为空时,一切正常。如何确定是否填充了集合(或提交的任何集合)?

最佳答案

这里的问题是SQL语法不允许使用空的IN子句。因此,在您的情况下,barSet不应为空。但是您可以简单地将null添加到集合中,然后再将其传递给查询:

barSet.add(null);
query.setParameter("barSet", barSet);

您可以在此处阅读有关此技巧的信息:SQL In Clause with Zero to Many Parameters

09-25 22:01