我想创建一个返回存储在数据库中的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
但我想使用类型化查询来防止那些令人讨厌的强制转换操作。
答案 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();
}