当前位置: 首页 > 知识库问答 >
问题:

JPA如何在内部运行查询的困惑?

东门焕
2023-03-14

我想实现分页,但我不想每次执行相同的查询时都执行完整的DBScan(这个DBcall是作为API完成的)。

到目前为止,对于分页,我在java中使用TypedQuery,并设置起始行和页面大小来获取记录。

但问题是我对JPA如何在内部运行查询感到困惑,我认为TypeQuery首先执行查询,然后向我发送我想要的结果子集。如果是这样,那么有没有办法跟踪上次处理的ResultSet并将其发送回响应,然后再次使用它下次我们再次访问此API时做一个结果et.next()?

或者有没有其他方法可以实现这一点?

while( resultSet in not null)  
    resultSet = API call to DB with  pageSize

共有1个答案

韩博简
2023-03-14

当您设置查询的起始行(即setFirstResult())和页面大小(即setMax结果())时,hibernate将在生成的SQL中包含偏移量和限制。因此它已经返回完整的结果集,并且不需要在内部跟踪最后处理的行。

hibernate会话基本上是请求作用域。您应该在请求完成后关闭它,并打开一个新的请求以处理另一个新请求。这还意味着在请求完成后,一个会话中的所有状态都将消失,这无助于跟踪上一个分页查询的偏移量。

无论何时调用API,API用户都必须显式地传递偏移量和限制。这意味着他们有责任跟踪最后一个偏移量,然后使用正确的偏移量调用API以获取下一页。

您可以考虑实现超媒体风格的API或使用链接标头进行分页,以减轻用户维护最后一个偏移量并为下一页计算正确偏移量的负担。类似这样的东西。

 类似资料:
  • 我是playframework应用程序开发人员。我使用jpa中的createNativeQuery方法通过select查询从表中提取值。我需要使用更新查询。我要做的是什么,以及该方法的返回类型是什么。请任何人帮助我。提前谢谢。如果我这样使用,它会显示错误。。 Query query=JPA.em()。createNativeQuery(" update truck set flag = ' YES

  • 问题陈述:在JPA hibernate中,我执行了一个方法

  • 问题内容: 当photoId直接在语句上而不是变量时,以下代码完全没有问题。 但是以下内容将无法正常运行,这可能是导致未选择该内容的原因。 这是在while循环内。 谢谢。 问题答案: 在php a和a中有很大的不同,查询语法在查询周围是双引号,在变量周围是单引号。。尽管我建议您在查询中使用参数,而不是直接将变量直接放入查询中 根据我的建议,您应该将查询更改为此: 这只是它的基本要点…如果您想了解

  • 问题内容: 我想使mysql查询以从表中的列中获取最高的5个值,所以查询是: 如何运行此查询并将其值保存在变量中? 如果可能,我更喜欢将findAll()方法与这些选项一起使用。 问题答案: 有几种方法可以实现此目的,但是如果您更喜欢查询生成器方法

  • 问题内容: 我从Linux Shell 连接到。我时不时地运行一个太大的查询。它可以打印,我已经知道这不是我的意思。我想停止查询。 击中(几次)会完全杀死并把我带回外壳,因此我必须重新连接。 是否可以在不杀死自己的情况下停止查询? 问题答案:

  • 问题内容: 我知道statement.cancel()可用于取消正在运行的SQL查询,但是我想知道的是,我将如何在另一个线程中保持该语句对象。 用例: 我请求启动一个运行语句的线程。 然后从一个单独的请求(另一个线程),我可能想取消此线程。 我将如何在这个 新请求中 获得声明以在其中调用cancel方法。 在某些情况下,我可能要运行多个语句。 附加信息,它是一个Web应用程序,使用spring框架