31

すべてのリストを取得せずに、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
4

3 に答える 3

39

このようにコードを変更します。

      int count = ((Number)em.createNamedQuery("Charakteristika.findAllCount").getSingleResult()).intValue();
      System.out.println(count);
于 2012-08-10T07:49:25.287 に答える
6

また、試してみることができます。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();
    }
于 2016-05-01T17:55:52.430 に答える
2

試す:

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

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

どこかに何かを与えなければならない。

于 2012-08-10T07:10:30.720 に答える