当我将空集设置为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();
当集合不为空时,一切都有效。我怎样才能知道集合(或任何集合提交)是否已填充?
答案 0 :(得分:3)
这里的问题是SQL语法不允许空IN
子句。因此,在您的情况下,barSet
不应为空。但是您可以在将null
传递给查询之前简单地添加barSet.add(null);
query.setParameter("barSet", barSet);
:
fwrite()
你可以在这里阅读这个技巧:SQL In Clause with Zero to Many Parameters
答案 1 :(得分:0)
hibernate中的In子句与Query.setParameterList()
https://docs.jboss.org/hibernate/orm/3.2/api/org/hibernate/Query.html#setParameterList(java.lang.String,java.util.Collection)方法一起使用。
您需要使用此方法并将Collection或Array作为参数传递。
Query query = this.entMngr.createNativeQuery("SELECT foo_id, first, last FROM foo WHERE bar IN :barSet");
//barSet is a Set<Integer>
query.setParameterList("barSet", barSet); // as barSet is a Collection.
//this throws exception
List<Object> nativeList = query.getResultList();