java - 使用 JPQL 对非实体结果进行类型化查询

标签 java jpa jpql

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/

相关文章:

mysql - GenerationType 和 MySQL 错误

java - SonarQube 8.2 分析显示 0 代码覆盖率

java - 如何销毁 Android 中的 CountDownTimer?

java - 为用户创建一个在多次重启后保持不变的唯一编号的最佳方法是什么

java - 是否可以将 persistence.xml 放在 META-INF 以外的位置?

jpa - OpenJPA 上的列顺序

spring-data-jpa - 具有 GROUP BY 和 GROUP_CONCAT 的 Criteria API 和 JPQL API 以及 DISTINCT/ORDER BY/SEPARATOR 支持?

java - @Query 不运行空条件

java - 在 Spring Data JPA 查询中将整数转换为字符串

java - Sonar - 存储副本 - 不应直接存储或返回可变成员