JPQL返回Named Query中的数字列表(with group by)

时间:2013-02-04 02:37:08

标签: java jpa jpql openjpa

我想创建一个返回存储在数据库中的Entity Client的所有roomIds的查询。 roomId是客户端实体中的一个属性。

我想使用这样的类型安全构造:

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
但我想使用类型化查询来防止那些令人讨厌的强制转换操作。

1 个答案:

答案 0 :(得分:0)

无需在TypedQuery中投射<long>。请参阅此内容;

    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();
     }