Java JPA计数命名查询

Java JPA计数命名查询,java,jpa,named-query,Java,Jpa,Named Query,如何使用namedquery获取count,而不获取所有列表(我认为这将提高性能)。这是无法工作的命名查询: @NamedQuery(name = "Charakteristika.findAllCount", query = "SELECT COUNT(c) FROM Charakteristika c") 执行此命令: System.out.println("a"); System.out.println(em.createNamedQuery("Charakteristika.findA

如何使用namedquery获取count,而不获取所有列表(我认为这将提高性能)。这是无法工作的命名查询:

@NamedQuery(name = "Charakteristika.findAllCount", query = "SELECT COUNT(c) FROM Charakteristika c")
执行此命令:

System.out.println("a");
System.out.println(em.createNamedQuery("Charakteristika.findAllCount", Integer.class).getSingleResult().intValue());
System.out.println("b");
System.out.println("a");
System.out.println(em.createNamedQuery("Charakteristika.findAll", Charakteristika.class).getResultList().size());
System.out.println("b");
输出:

a
a
11111
b
尽管此查询有效:

@NamedQuery(name = "Charakteristika.findAll", query = "SELECT c FROM Charakteristika c")
执行此命令:

System.out.println("a");
System.out.println(em.createNamedQuery("Charakteristika.findAllCount", Integer.class).getSingleResult().intValue());
System.out.println("b");
System.out.println("a");
System.out.println(em.createNamedQuery("Charakteristika.findAll", Charakteristika.class).getResultList().size());
System.out.println("b");
输出:

a
a
11111
b
尝试:

看看它的输出是否对你有什么启示

如果不行

  • 尝试
    getResultList
    而不是
    getSingleResult
    ;在其他方面也一样

  • 尝试
    createQuery(“从Charakteristika c中选择计数(c))。getSingleResult
    &
    getResultList

  • 探索查询声明的差异;正如JB指出的,查询是相同的。所以,试着用上面不同的形式写两个名字

  • 检查你是如何建立的;这是已部署应用程序的一部分吗?独立的


必须在某个地方给予一些东西。

像这样更改代码

      int count = ((Number)em.createNamedQuery("Charakteristika.findAllCount").getSingleResult()).intValue();
      System.out.println(count);

您也可以尝试:使用带有长值的TypeQuery接口。在下一个示例中,“PosicionHistorialDia.findnumbers”查询是一个jpa计数

    @Override
    public Long findCount(String eventCode) {
         TypedQuery<Long> query = em.createNamedQuery(
            "PosicionHistorialDia.findNumberSpeeding",
            Long.class);
        query.setParameter("event", eventCode);
        return query.getSingleResult();
    }
@覆盖
公共长findCount(字符串事件代码){
TypedQuery query=em.createNamedQuery(
“PositionHistorialDia.FindNumber”,
(长班),;
query.setParameter(“事件”,eventCode);
返回query.getSingleResult();
}

@JBNizet查询是相同的,执行是不同的。很抱歉,问题还是一样的,只是第二次查询拼写错误。@JBNizet第二次执行指定结果类型为
Charakteristika.class
;我猜这是在浪费时间,为
N
行中的每一行返回一个计数。@Minutis通常看起来是合理的,所以我认为更多信息可能会有所帮助-您的运行时环境是什么?JPA引擎、版本等?@Minutis:哪个问题?告诉我们发生了什么事。没有结果,没有错误,只是在输出“a”后挂起。你也在铸造结果的数字类是什么?不应该是(int)吗?