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
的情况下执行相同的操作?
最佳答案
类似的查询
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 属性名称相匹配。
关于java - 使用 JPQL 对非实体结果进行类型化查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14744887/