这是关于EclipseLink使用的好模式吗?

时间:2014-10-16 12:15:01

标签: performance caching jpa eclipselink

我在通过JPA使用EclipseLink的代码库中找到了以下模式:

TypedQuery query = ...
...
if(query.getResultList().size() > 0) {
  return query.getSingleResult();
} else {
  return null;
}

抛弃关于返回null的问题是一个好主意,我更想知道这样一个事实:虽然这两个查询在代码中是连续的,但是在负载很重的情况下(这个项目是预期的),查询可以针对数据库触发两次,而不是使用缓存。

我错了,我可以安全地假设第二次调用将始终到达缓存,或者是否应该重新编写这种模式以便捕获NoResultException?

1 个答案:

答案 0 :(得分:1)

不,这不是一个好的模式。你不必要地执行两次查询,因此根据其他设置来阻止查询命中数据库,这可能已经或可能没有配置-EclipseLink有一个查询缓存,但默认情况下它没有启用,你真的没有&#39 ; t需要在这里使用它。如果您还没有配置查询缓存,则实体将从第一个查询缓存,因此您将多个实体读入内存,然后可能再次访问数据库以获取其中一个实体。 / p>

常见模式只是检查列表并返回第一个值:

List values = query.getResultList();
if(values.size() > 0) {
  return values.get(0);
} else {
  return null;
}

如果此查询可以返回大量实体,您也可以调用query.setMaxResults(1);限制返回的结果。