当我将一个空集合设置为 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();
当集合不为空时,一切都能正常工作。如何使其不依赖于集合(或任何提交的集合)是否有数据?
barSet.empty()
并返回Collections.emptyList()
。 - DathanbarSet.add(null);
)而不是更快的代码(检查特殊情况)。 - denedIN
子句,你会怎么做?.. - denedIN
子句的情况是一个非常好的观点--在这种情况下,使用null
技巧比我能想到的其他任何方法都更清晰地处理该情况。 - DathanIN
子句,而是可能会出现一些查询即使有一个“空”的IN
子句也返回非空结果的情况。另外一个问题是,如果你更改了一个查询,导致它开始返回即使有“空”IN
子句也返回非空结果,那么你还应该对显式检查做点什么,如果你忘记了这样做,你就会遇到麻烦... 如果使用NULL
技巧,则不会出现这些问题。 - dened