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)

有一种解决方案可以在使用类型化查询的情况下解决此问题,请参阅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 回答