如何使用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
答案 0 :(得分:36)
像这样更改您的代码;
int count = ((Number)em.createNamedQuery("Charakteristika.findAllCount").getSingleResult()).intValue();
System.out.println(count);
答案 1 :(得分:4)
您也可以尝试:使用带有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();
}
答案 2 :(得分:1)
尝试:
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
&amp; getResultList
探索查询声明的差异;正如JB指出的那样,查询是一样的。因此,请尝试使用上述不同形式的两个名称。
检查你是如何建造的;这是部署应用程序的一部分吗?单机?
某些东西必须放在某处。