web-dev-qa-db-ja.com

JPAカウント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
28
Minutis

このようにコードを変更してください。

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

また、試してみることができます。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();
    }
4
Gaalvarez

試してください:

_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が指摘しているように、クエリは同じです。したがって、上記の異なる形式で両方の名前を試してください。

  • 構築方法を調べます。これはデプロイされたアプリの一部ですか?スタンドアロン?

何かをどこかにあげる。

1
Richard Sitze