使用单个查询使用@NamedQuery
在单行中获取结果更好还是使用更好createQuery
?
我在 DAOImpl 中有以下内容
CriteriaBuilder cb = entityManager.getCriteriaBuilder();
CriteriaQuery<Project> c = cb.createQuery(Project.class);
Root<Project> prj = c.from(Project.class);
c.orderBy(cb.desc(prj.get("projectNo")));
c.select(prj);
CriteriaQuery<Long> countQ = cb.createQuery(Long.class);
Root<Project> prjCount = countQ.from(Project.class);
countQ.select(cb.count(prjCount ));
String projectNo = filters.get("projectNo");
List<Predicate> criteria = new ArrayList<Predicate>();
if (projectNo != null) {
ParameterExpression<String> pexp = cb.parameter(String.class,
"projectNo");
Predicate predicate = cb.like(prj.get(Project_.projectNo),
pexp);
criteria.add(predicate);
}
if (criteria.size() == 1) {
c.where(criteria.get(0));
countQ.where(criteria.get(0));
} else if (criteria.size() > 1) {
c.where(cb.and(criteria.toArray(new Predicate[0])));
countQ.where(cb.and(criteria.toArray(new Predicate[0])));
}
TypedQuery<Project> q = entityManager.createQuery(c);
TypedQuery<Long> countquery = entityManager.createQuery(countQ);
在TypedQuery
我可以使用实体类中定义的任何一个createQuery
或调用。createNamedQuery
我使用的原因createQuery
是因为我想根据过滤条件过滤并获得结果。而如果我正在使用createNamedQuery
,那么我需要在其中添加一个 where 条件,@NamedQuery
最重要的是我需要检查过滤条件是否为 null,如果它为 null,那么我使用某种通配符,例如%
从数据库中获取所有结果这可能会导致延迟。
所以我有两个疑问
使用过滤器或有效搜索是否更好
createQuery
,通过执行多个基于我的映射和连接的 sql 语句?使用
@NamedQuery
并具有 where 条件并仅执行一个带有连接的 sql 会更好吗?
任何见解或输入或帮助都是非常可观的。