从查询中获取计数

时间:2014-05-26 13:16:06

标签: jpa criteria entitymanager named-query

我正在使用mysql 5.5和openjpa 2.3.0。

我有使用namedQueries的实体(在netbeans中生成 - 我希望能够使用它),例如:

@NamedQuery(name = "User.findAll", query = "SELECT u FROM User u")
@NamedQuery(name = "User.findByGender", query = "SELECT u FROM User u WHERE u.gender = :gender")

我正在使用分页结果创建restfull aplication。我想针对每个分页结果返回Content-Range标题1-20/250,其中20是页面大小,总计250个。

我尝试创建了一个查询

entityManager.createNativeQuery("SELECT count(1) FROM (" + namedQuery.toString() + ") as foo;");

我可以动态插入任何命名查询并返回计数而不返回结果列表 - >它应该更快。

当我执行此操作时,会发生异常

SQL state 42S22: Unknown column 'u' in 'field list'

在entitymanager中执行查询本身是可以的。 我是否可以使用实体管理器或条件构建器来创建查询结果而不返回结果列表(并且不为每个namedQuery写入计数重复)?谢谢你的帮助。

1 个答案:

答案 0 :(得分:0)

您正在将JPQL与本机查询混合使用。 JPQL表示SELECT u FROM entity u,SQL将是SELECT * FROM entity u或SELECT col1,col2,col3 FROM entity u

您可以编写一个JPQL命名查询来计算内容,例如: SELECT COUNT(u)FROM entity u。然后getSingleResult()将返回一个Object [],其第一个元素包含count。

不好但是工作。为什么你还要查询号码呢?分页意味着next = lastindex + pagesize。如果下一个< lastindex + pagesize,结束了。