[英]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").getSingleResult
& getResultList
探索查詢聲明的差異; 正如JB指出的那樣,查詢是一樣的。 所以嘗試使用上面不同形式的兩個名稱。
檢查你是如何建造的; 這是部署應用程序的一部分嗎? 單機?
有些東西必須放在某個地方。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.