在 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 一个不可修改的空列表是一个很好的做法。
当我有一个 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 一个不可修改的空列表是一个很好的做法。