JPA @查询计数并选择

时间:2019-10-09 14:20:15

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

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

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

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

对于两个查询,后面的内容(...)是相同的。有什么办法可以将它们组合在一起,以便我不再重复我自己?

  • 我知道我可以使用第二种方法,并计算结果List中的元素数量。但是,这会增加从数据库实际获取所有这些元素的开销。
  • 我可以将...放在一个字符串常量中的某个地方,但是那样会将其与上下文分开(我会失去IntelliJ的语法高亮显示/错误检查)
  • 我无法将其转换为“条件”或“示例”查询,因为我需要使用PostGIS的地理位置类型。 (而且这些内容还是不太可读...)

还有其他想法吗?

1 个答案:

答案 0 :(得分:0)

如果您担心某些开发人员会更改COUNT查询,但也忘记更改SELECT查询,则可以创建存储库集成测试以保证预期结果在两个查询之间。

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