当我在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