首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JPA createQuery或@NamedQuery

JPA createQuery或@NamedQuery
EN

Stack Overflow用户
提问于 2013-07-28 10:18:22
回答 1查看 4K关注 0票数 2

使用@NamedQuery获取单个行中的结果还是使用createQuery更好?

我在DAOImpl中有以下内容

代码语言:javascript
复制
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,那么我需要在@NamedQuery中添加一个where条件,最重要的是我需要检查过滤器条件是否为null,如果它是null,则使用某种野生字符(如% )从数据库中获取可能导致延迟的所有结果。

所以我有两个疑问

  • 通过执行基于映射和联接的多个sql语句,是否更好地使用createQuery来有效地使用过滤器或搜索?
  • 是否最好使用@NamedQuery,并有一个where条件,并且只执行一个带有联接的sql?

任何洞察力、投入或帮助都是非常值得赞赏的。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-28 11:46:33

基本上,@NamedQuerytypedQuery一样,typedQuery是创建查询的结果:

代码语言:javascript
复制
TypedQuery<USER> hql = entityManager.createQuery(query);

@NamedQuerytypedQuery之间唯一的区别是命名查询在与代码不同的位置上,并在创建会话工厂时进行检查。

性能问题的差异仅仅是构建字符串,所以除非您的联接位于上百个或数千个表中,否则您将不会发现这两个表之间的任何区别。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17907199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档