在javax.persistence.Query上调用getResultList()会执行两次查询吗?

时间:2016-03-01 16:38:59

标签: java javax.persistence

当我有一个javax.persistence.Query,我期待List我总是检查以确保List的大小大于1,然后返回任何值。 e.g。

Query q = em.createQuery(sql);

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

我想知道当我检查大小时以及当我执行两次查询时返回结果时。

2 个答案:

答案 0 :(得分:3)

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

请改为:

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

当然,如果这是TypedQuery,您应该添加泛型部分。优良作法是从没有结果记录的查询中返回不可修改的空列表。

答案 1 :(得分:0)

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

在比较之前,我会将其存储在变量List storeHere = q.getResultList();

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