hibernate - 如何在 jpa 中检索记录和字段值

标签 hibernate jpa

考虑以下实体:

@Entity
public class User {
    private int id;
    private String name;
    private String family;
    //getters and setters
}

和 sql:
select * 
from (select row_.*, first_Value(rownum) over (order by rownum desc) countـ
      from (select * from user) row_)

正如您可能猜到的,sql 的结果集由四列组成:
id, name, family, countـ

我通过以下方式检索用户表记录作为用户列表:
String myQuery = "select * from (select row_.*, first_Value(rownum) over (order by rownum desc) count_
      from (select * from user) row_)"
Query query = entityManager.createNativeQuery(myQuery, User.class);
List<User> users = query.getResultList();

现在的问题是,如何仅通过调用一次 getResultList() 或任何其他 hibernate 等效项来检索用户列表并计算值?

我使用 Oracle 11g 和 Jpa(Hibernate implementation 3.6)

提前致谢。

最佳答案

我认为“计数”是一个保留词。我会像这样重新组织您的查询:

String myQuery = "SELECT "
        + "id, "
        + "name, "
        + "family, "
        + "cnt "
        + "FROM ("
            + "SELECT "
            + "user.*, "
            + "first_Value(rownum) over (order by rownum desc) AS cnt "
            + "FROM "
            + "user "
        + ")";
    Query query = entityManager.createNativeQuery(myQuery);
    List<Object[]> resultList = query.getResultList();

当然,您也可以使用 * 代替“id、name、family、cnt”。

关于hibernate - 如何在 jpa 中检索记录和字段值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16130476/

相关文章:

java - 参数动态时如何构建 JPQL 查询?

mysql - 将 HQL 与 MySQL 结合使用,如何在分组依据之前对结果集进行排序,以便选择正确的记录?

java - 必须至少存在一个 JPA 元模型!但它是生成的吗?

java - Jpa 复合键可为空的列

java - 使用 JPA2/Hibernate 并发写入和读取

java - Spring Boot 将 'es' 添加到链接

Spring、Struts 2、Hibernate 应用程序中的 JSONException : org. hibernate.LazyInitializationException

java - 从数据库中检索特定数量的记录 - JPA(提高性能)

java - 从外部 Jar 文件加载 JPA 实体

java - 如何使用 JPA 锁定数据库行,直到更新另一个表