Pet*_*zov 5 java jpa jpa-2.0 spring-data-jpa
我想使用这个 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();
Run Code Online (Sandbox Code Playgroud)
但我收到错误: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();
}
Run Code Online (Sandbox Code Playgroud)
我不知道如果通过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() + ...
Run Code Online (Sandbox Code Playgroud)
I am not familiar with hibernate but since it is an SQL error, the following should work :
TypedQuery<Terminals> query = entityManager
.createQuery(hql, Terminals.class)
.setParameter("merchant_ids",merchant_ids.size()==0?null:merchant_ids);
Run Code Online (Sandbox Code Playgroud)
But as @Richard Barker mentioned , best solution is to not even execute the query when the list is empty. You will even save on the unnecessary database call , when you already know that the query is not going to return anything.
| 归档时间: |
|
| 查看次数: |
3612 次 |
| 最近记录: |