带有Spring数据的java筛选器谓词计数
我正在使用Spring数据后端构建一个JavaSpringMVCwebapp。在我的应用程序中,您可以搜索文章或类别。稍后,您可以使用进一步的过滤谓词(如颜色、大小等)优化搜索结果。我想知道如何将total添加到每个谓词中,比如autoscout24。是的
示例:
搜索文章:运动鞋
搜索类别:鞋子
优化搜索:
颜色:
红色(1.001)
绿色(453)
黑色(12.000)
大小:
8(1.000)
9(2.000)
10(10.021)
这意味着有1000双8号运动鞋可供选择。如果我选择红色,8号鞋的总数也会减少,因为并非所有8号鞋都是红色的。 我在查询中使用Pageable,因为我不想一次从数据库中加载数千篇文章。这意味着无法在结果列表中进行计数。它也不具有可伸缩性。或者,这是通过使用具有多个计数的第二个查询来实现的?如何将其用于Spring数据?是否可能或必须使用本机查询
谢谢, 尼克
# 1 楼答案
您应该构建一个自定义查询并使用
SELECT colorName, count(*) FROM myTable GROUP BY colorName
另一种方法是对每个属性使用
count(*)
查询,即尺寸也一样。但这可能比
GROUP BY
慢备选方案(更快,但更复杂):
创建一个附加表,用作某种键值存储,在其中保存预计算值:
创建/更新/删除项时,还必须使用预计算的值更新表
您还可以存储更复杂的内容,如“组合量‘颜色=绿色’”和‘大小=9’”。它总是一个简单的
amount = amount+1
或amount = amount-1
这样,检索值的速度非常快,但您必须维护一个额外的表
我知道,这个答案实际上与Spring数据无关,但在这种情况下,Spring数据并不能为您提供多少帮助。您期望的逻辑必须是手工编制的,Spring数据只能为您执行查询并将结果映射到某些POJO