我在我的应用程序中使用 Spring Data 和 JPA,我正在尝试为动态标准 API 实现 QueryDSL。就我在标准中发送特定值而言,使用以下谓词可以正常工作:
Predicate predicate = QProductInfo.productInfo.shopName.eq(shopName).and(QProductInfo.productInfo.productType.eq(productType));
但是,如果我收到多个过滤器参数并希望使用 Map 来存储 (column_name - column_value) 的键值对以动态派生查询,我将无法创建相同的查询。意味着我知道我可以在 Predicate 中使用 and 或其他运算符添加尽可能多的条件,但我需要使用多少表达式仅在运行时决定,因此无法找出形成正确表达式的方法。
这是一些代码信息
@Entity
Public class ProductInfo{
productId;
title;
vendor;
code;
.... and more
}
现在过滤器可以从 1 到 n 个字段变化,其值类似于 filter 1 = product_id=123,title=test filter 2 =title= xyz, code= abc, vendor=pqr
所以我将使用 map 来存储键值对(title-xyz 等)并希望动态构造查询。
我经历了许多教程,但到目前为止找不到适合我的条件的解决方案。我也想过在迭代 map 循环时使用 Switch,但是如何组合所有表达式/谓词,我不知道。
如果我找不到解决方案,我可能会使用 JPA Criteria API,我们可以在其中轻松使用谓词列表。让我知道是否需要任何信息来帮助我。
谢谢