【发布时间】: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