我想使用此SQL查询:
String hql = "select e from " + Terminals.class.getName() + " e WHERE e.merchantId IN :merchant_ids";
TypedQuery<Terminals> query = entityManager.createQuery(hql, Terminals.class).setParameter("merchant_ids", merchant_ids);
List<Terminals> merchants = query.getResultList();
但是我得到了错误:
the right syntax to use near ')
所以IN (....)
中的IN子句列表不能为空。有解决这个问题的办法吗? 最佳答案
不执行查询是允许的,甚至很好:
if (merchant_ids.isEmpty()) {
return new ArrayList<>();
} else {
String hql = "select e from " + Terminals.class.getName()
+ " e WHERE e.merchantId IN :merchant_ids";
return entityManager.createQuery(hql, Terminals.class)
.setParameter("merchant_ids", merchant_ids)
.getResultList();
}
我不知道如果传递
null
而不是一个空列表会怎样?SQL
... IN NULL
可以做到。另一方面,它可能会进行全表扫描以返回0个结果。如果
x IN()
不会导致0条记录(当有OR ...
时),则:if (merchant_ids.isEmpty()) {
merchant_ids.add(-1);
String hql = "select e from " + Terminals.class.getName() + ...