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();
如果没有在JPQL查询文本中对com.loki2302.JPQLTest$UserNameAndPostCount
进行硬编码,是否有任何“官方”方法可以做同样的事情?
答案 0 :(得分: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),并且您可以轻松地放置 select子句中的“AS {alias}”,用于获取结果字段以匹配结果类中的bean属性名称。
答案 1 :(得分:0)
要避免这种硬编码,可以使用entityManager接口的createNamedQuery(String)。 要使用此方法,您必须在模型(实体类)中创建NamedQueries,并使用Query对象而不是TypedQuery。