2013-04-21 56 views
4

请考虑以下实体:如何检索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()或任何其他休眠等价物一次来计算值?

我使用Oracle 11g和JPA(Hibernate实现3.6)

在此先感谢。

+0

什么是代码中的“builder”? – 2013-04-21 15:49:28

+0

对不起,我用myQuery取代了它... – 2013-04-22 08:11:46

回答

2

我觉得“count”是一个保留字。我会重新组织您的查询,如下所示:

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”。

相关问题