2016-03-01 20 views
-1

当我有一个javax.persistence.Query,我期待从List我总是检查,以确保List大小超过1返回任何值之前。 例如在javax.persistence.Query上调用getResultList()是否执行查询两次?

Query q = em.createQuery(sql); 

if(q.getResultList().size()<1) 
     { 
      return new ArrayList(); 
     } 
     else 
     { 
      return q.getResultList(); 
     } 

我想知道是否当我检查的大小和当我返回结果如果查询正在执行两次。

+0

@MarkRotteveel:同意,删除我的评论。 – kosa

+1

代码中的q是什么? – ParkerHalo

回答

2

getResultList()执行查询,就像docs说的那样。

而是执行此操作:

List results = q.getResultList(); 
if (results.size() == 0) { 
    return Collections.emptyList(); 
} else { 
    return results; 
} 

当然,如果这是一个TypedQuery,你应该增加仿制药的部分。返回一个不包含结果记录的查询中不可修改的空列表是一个好习惯。

0

如果q.getResultList();是实际的查询,那么是的。

前相比,我将它存储在一个变量List storeHere = q.getResultList();

然后比较变量,而不是命令。

+0

这只是一个存储变量的例子,因为我们并不知道'q'是。 – Deckerz