簡體   English   中英

JPA計數NamedQuery

[英]JPA count NamedQuery

如何使用namedquery進行計數,而不是獲取所有列表(我認為這會提高性能)。 這是不起作用的命名查詢:

@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");

輸出:

a

雖然此查詢有效:

@NamedQuery(name = "Charakteristika.findAll", query = "SELECT c FROM Charakteristika c")

執行此:

System.out.println("a");
System.out.println(em.createNamedQuery("Charakteristika.findAll", Charakteristika.class).getResultList().size());
System.out.println("b");

輸出:

a
11111
b

改變你喜歡的代碼;

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

您也可以嘗試:使用帶有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();
    }

嘗試:

System.out.println("a");
System.out.println(em.createNamedQuery("Charakteristika.findAllCount").getSingleResult());
System.out.println("b");

看看它的輸出是否對你有所幫助。

沒錯,

  • 嘗試getResultList而不是getSingleResult ; 否則一樣。

  • 嘗試createQuery("SELECT COUNT(c) FROM Charakteristika c").getSingleResultgetResultList

  • 探索查詢聲明的差異; 正如JB指出的那樣,查詢是一樣的。 所以嘗試使用上面不同形式的兩個名稱。

  • 檢查你是如何建造的; 這是部署應用程序的一部分嗎? 單機?

有些東西必須放在某個地方。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM