我想使用此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() + ...

10-08 01:57