【问题标题】:JPA @Query count AND selectJPA @Query 计数并选择
【发布时间】:2019-10-09 14:20:15
【问题描述】:

我在 JpaRepository 中有一个有点复杂的 @Query。

我需要以两种形式(但不能同时!)获取此查询的结果:

  • 首先,客户端要求统计结果数:SELECT COUNT(x.*) FROM my_table x ...
  • 然后稍后(也许),他们想查看实际数据:SELECT x.* FROM my_table x ...

接下来的内容(...)对于两个查询是相同的。有什么办法可以把这些结合起来,这样我就不会重复了?

  • 我知道我可以只使用第二种方法,并计算结果列表中的元素数量。但是,这会增加从数据库中实际获取所有这些元素的开销。
  • 我可以将... 放在某个字符串常量中,但这会将它与其上下文分开(我会失去 IntelliJ 的语法突出显示/错误检查)
  • 我无法将其转换为条件或示例查询,因为我需要使用 PostGIS 的 geography 类型。 (无论如何这些都不太可读......)

还有其他想法吗?

【问题讨论】:

  • 使用两个单独的查询已经满足您的要求,并且似乎是这里唯一的选择。
  • 也违反了 DRY...
  • 如果您不确定是否需要运行第二个查询,那么您如何证明提前运行它是合理的?
  • 我不会提前运行它。我运行第一个查询并报告计数。稍后,如果我收到请求,我会运行第二个查询并返回结果。
  • JPA 真的与此无关,只是数据库问题。如果您首先运行完整的查询,那么您必须再次运行它。请注意,花在数据库上的时间并不是真正的问题,而是您必须往返于应用程序的额外往返时间。

标签: spring hibernate spring-boot jpa spring-data-jpa


【解决方案1】:

如果您担心某些开发人员更改了COUNT 查询并忘记更改SELECT 查询,您可以创建一个存储库集成测试以保证两个查询之间的预期结果.

另一种方法是创建一个单元测试来读取注释内容并验证这两个查询的最终结果是否相等。

【讨论】:

    猜你喜欢
    • 2013-03-24
    • 1970-01-01
    • 2019-02-19
    • 2022-11-18
    • 2013-11-11
    • 2013-07-16
    • 2014-09-02
    • 2019-01-27
    • 2020-06-25
    相关资源
    最近更新 更多