Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jpa 从查询中获取计数_Jpa_Criteria_Entitymanager_Named Query - Fatal编程技术网

Jpa 从查询中获取计数

Jpa 从查询中获取计数,jpa,criteria,entitymanager,named-query,Jpa,Criteria,Entitymanager,Named Query,我在OpenJPA2.3.0中使用mysql 5.5 我有在netbeans中生成的namedQueries实体-我希望能够使用它,例如: @NamedQuery(name = "User.findAll", query = "SELECT u FROM User u") @NamedQuery(name = "User.findByGender", query = "SELECT u FROM User u WHERE u.gender = :gender") 我正在使用分页结果创建rest

我在OpenJPA2.3.0中使用mysql 5.5

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

@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应用程序。我想返回每个页面结果的内容范围标题为1-20/250,其中20是pagesize,250总计数

我试图创建一个查询

entityManager.createNativeQuery("SELECT count(1) FROM (" + namedQuery.toString() + ") as foo;");
在这里,我可以动态插入任何命名查询并返回计数,而不返回结果列表->应该更快

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

SQL state 42S22: Unknown column 'u' in 'field list'
在entitymanager中执行查询本身是可以的。
我是否可以使用实体管理器或条件生成器为计数结果创建查询,而不返回结果列表,也不为每个命名查询写入重复计数?谢谢您的帮助。

您将JPQL与本机查询混合在一起。JPQL说从实体u中选择u,SQL将是从实体u中选择*或从实体u中选择col1、col2、col3

您可以编写一个名为查询计数的JPQL,例如,从实体u中选择COUNTu。然后,getSingleResult将返回一个对象[],其第一个元素包含计数


不是很好,但是很有效。你为什么还要查询这个号码?分页意味着下一步=最后一个索引+页面大小。如果next我的查询可以返回许多行,我想知道之前的计数,至少在前端web上显示返回的所有项目的数量-如我所述,设置内容范围。。。也许我可以将namedQuery转换为SQL查询,如Select*…?我想你误解了我:我在你的位置上会做的是:选择第一页,pagesize+1元素,如果resultset==pagesize+1,则存在另一页,所以下一页将从2*pagesize,pagesize+1元素中选择,等等。因为您只是分页,所以只需选择一个页面,然后决定是否可以进行另一个分页。这使您能够在堆中只保留一个page+1元素。是的,我通过设置第一个和最大结果来实现这一点,这很好。。但是除了显示总结果之外,我还想计算“最后一页”,例如,我看到的totalcount/pagesizeyah。你可以像谷歌那样做,告诉用户这是最少50次点击中的25次:我通过将Select Count1和namedQuery.toString.substring..indexOfFROM的讨厌字符串连接来做到这一点,所以我去掉了Select u部分,但不知怎的是硬编码的解决方案:。。谢谢你的想法