JPA计数NamedQuery

Min*_*tis 28 java jpa named-query

如何使用namedquery计数,而不是获取所有列表(它会提高我认为的性能).这是不起作用的命名查询:

@NamedQuery(name = "Charakteristika.findAllCount", query = "SELECT COUNT(c) FROM Charakteristika c")
Run Code Online (Sandbox Code Playgroud)

执行此:

System.out.println("a");
System.out.println(em.createNamedQuery("Charakteristika.findAllCount", Integer.class).getSingleResult().intValue());
System.out.println("b");
Run Code Online (Sandbox Code Playgroud)

输出:

a
Run Code Online (Sandbox Code Playgroud)

虽然此查询有效:

@NamedQuery(name = "Charakteristika.findAll", query = "SELECT c FROM Charakteristika c")
Run Code Online (Sandbox Code Playgroud)

执行此:

System.out.println("a");
System.out.println(em.createNamedQuery("Charakteristika.findAll", Charakteristika.class).getResultList().size());
System.out.println("b");
Run Code Online (Sandbox Code Playgroud)

输出:

a
11111
b
Run Code Online (Sandbox Code Playgroud)

Sai*_*Aye 36

改变你喜欢的代码;

      int count = ((Number)em.createNamedQuery("Charakteristika.findAllCount").getSingleResult()).intValue();
      System.out.println(count);
Run Code Online (Sandbox Code Playgroud)

  • 您正在投射结果的Number类是什么?不应该是(int)吗? (2认同)

Gaa*_*rez 6

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

    @Override
    public Long findCount(String eventCode) {
         TypedQuery<Long> query = em.createNamedQuery(
            "PosicionHistorialDia.findNumberSpeeding",
            Long.class);
        query.setParameter("event", eventCode);
        return query.getSingleResult();
    }
Run Code Online (Sandbox Code Playgroud)