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

Does invoking getResultList() on javax.persistence.Query execute the query twice?

当我有一个 javax.persistence.Query 而我期待 List 时,我总是检查以确保 List 在 [=19= 之前的大小大于 1 ]ing 任何值。 例如

Query q = em.createQuery(sql);

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

我想知道如果查询被执行两次,我何时检查大小以及何时 return 结果。

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

在比较之前我会把它存储在一个变量中List storeHere = q.getResultList();

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

getResultList() 执行查询,正如 docs 所说。

改为这样做:

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

当然,如果这是 TypedQuery,您应该添加泛型部分。从没有结果记录的查询中 return 一个不可修改的空列表是一个很好的做法。