すべてのリストを取得せずに、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が指摘しているように、クエリは同じです。したがって、上記の異なる形式で両方の名前を試してください。
構築方法を調べます。これはデプロイされたアプリの一部ですか?スタンドアロン?
何かをどこかにあげる。