0

データベースに格納されているエンティティ クライアントのすべての roomId を返すクエリを作成したいと考えています。roomId は Client エンティティの属性です。

次のような型安全な構造を使用したいと思います。

TypedQuery<Set<Long>> q = em.createNamedQuery("getRoomIdsByServer", Set.class);
q.setAttribute("server",server);

ただし、これによりコンパイル エラーが発生します。

NamedQuery は次のようになります。

@NamedQuery(name = "getRoomIdsByServer", query = "SELECT c.room_id FROM Client c WHERE c.server = :server GROUP BY c.room_id")

ただし、これは JPQL の範囲を超えているようです。openJPA (バージョン 2.2.1) を使用しています。

型付きクエリを使用せずにこの問題を解決する解決策が 1 つあります。https://stackoverflow.com/a/6956037/1448704
を参照してください。

4

1 に答える 1

0

<long>TypedQuery でキャストする必要はありません。これを参照してください。

    TypedQuery<Set> q = em.createNamedQuery("getRoomIdsByServer", Set.class);
    q.setAttribute("server",server);

または、このように使用できます。

    public List<String> getAllRoomIds(String server) {
          return em.createNamedQuery("getRoomIdsByServer", Set.class).setParameter("server", server).getResultList();
     }
于 2013-02-04T05:04:38.767 に答える