1
TypedQuery<UserNameAndPostCount> query = entityManager.createQuery(
  "select new com.loki2302.JPQLTest$UserNameAndPostCount" + 
  "(u.userName, count(p.id)) " +
  "from User u " + 
  "left join u.posts p group by u.userName", UserNameAndPostCount.class);

List<UserNameAndPostCount> resultList = query.getResultList();

com.loki2302.JPQLTest$UserNameAndPostCount在 JPQL 查询文本中没有硬编码的情况下是否有任何“官方”方式可以做到这一点?

4

2 回答 2

1

像这样的查询

entityManager.createQuery("SELECT u.userName, count(p.id) FROM User u LEFT JOIN u.posts p GROUP BY u.userName", UserNameAndPostCount.class);

可能会在一些 JPA 实现上工作,当然DataNucleus JPA旨在做这些事情。毕竟,最后一个参数是结果类,所以它基本上是说用这些结果字段作为参数创建我该类型的对象(或使用名称与这两个结果字段一致的 setter),你可以很容易地把“AS { alias}"在 select 子句中获取结果字段以匹配结果类中的 bean 属性名称。

于 2013-02-07T06:34:10.617 回答
0

为了避免这种硬编码,您可以使用 entityManager 接口的 createNamedQuery(String) 。要使用此方法,您必须在模型(实体类)中创建 NamedQueries 并使用 Query 对象而不是 TypedQuery。

于 2013-02-07T06:37:39.870 回答