当前位置: 首页 > 知识库问答 >
问题:

与And结合使用或使用CriteriaBuilder和谓词

松德曜
2023-03-14

我们有一个现有的谓词来从表中获取数据,我们还需要将此条件添加到该查询中

AND (SERVICE_ID IN (1,2,34,5) or (SERVICE_ID IN (83,24) and DEST_WALLET_TYPE=4 and DEST_ENTITY_TYPE = 6))

我们尝试了不同的方法,但我们所能做到的就是

and (SERVICE_ID in (1,2,34,5) 
or DEST_WALLET_TYPE_ID=4 and DEST_ENTITY_TYPE=6 and (SERVICE_ID in (24 , 83)))

简单括号应在<代码>或 之后开始,并应在最终条件之后结束。

我们试过这些

步骤-1

Predicate p1 = builder.and(root.get("serviceId").in(params.getFinancialServiceList()));
                
Predicate p22 = builder.equal(root.get("destWalletType"), (params.getMainWallet()));
Predicate p23 = builder.equal(root.get("destEntity"), params.getBillerEntity());
Predicate p2 = builder.and(p22, p23, builder.and(root.get("serviceId").in(Services.TOPUP, Services.DATA_RECHARGE)));
                
builder.or(p1, p2);

步骤-2

Predicate p1 = builder.and(root.get("serviceId").in(params.getFinancialServiceList()));
                
builder.or(p1, 
            builder.and(builder.equal(root.get("destWalletType"), (params.getMainWallet()))),
            builder.and(builder.equal(root.get("destEntity"), params.getBillerEntity())),
            builder.and(builder.and(root.get("serviceId").in(Services.TOPUP, Services.DATA_RECHARGE))));

我们能得到一些帮助吗?

共有1个答案

武成和
2023-03-14

使用此选项:

Predicate p1 = root.get("serviceId").in(params.getFinancialServiceList());
Predicate p21 = root.get("serviceId").in(Services.TOPUP, Services.DATA_RECHARGE);
Predicate p22 = builder.equal(root.get("destWalletType"), (params.getMainWallet()));
Predicate p23 = builder.equal(root.get("destEntity"), params.getBillerEntity());

Predicate p2 = builder.and(p21, p22, p23);
builder.or(p1, p2);
 类似资料:
  • 我正在开发一个Spring应用程序,并在一个存储库上定义各种查找方法: 问题是我有30列,可以选择对其进行筛选。这将导致存储库方法变得笨拙: JPA层应该如何设计以适应这种情况? 如果我创建一个具有属性的对象: 我可以将<code>SearchObject</code>传递到一个查找方法中,Spring JPA将根据哪些属性为空来确定要插入哪些属性和用于哪些属性的语句-如果属性不为空,则为该属性生

  • 我有一个Spring boot项目,它有一套单元测试,使用mockito的@InjectMock来实例化正在测试的类,并将可能存在的任何Mock注入其中。 换句话说,如果我有这个 @InjectMocks MyClass myClass; 那我就不需要 MyClass MyClass=新的MyClass() 或@Autowired MyClass MyClass; 到目前为止,这种设置运行良好。

  • 问题内容: 当尝试使用我创建类型查询时,出现以下别名问题。 我应该对以下代码进行哪些更改以获取计数? 限制条件: 我必须使用CriteriaBuilder / Query,因为必须根据值动态构建where子句。 我只需要COUNT,而不需要内存中的对象列表。 代码示例片段: 日志:我希望在所有where子句属性中使用generateAlias0而不是generateAlias1。 问题答案: 您的

  • 问题内容: 我们将Robotium与一起用于测试。虽然如此,我们想用Robotium代替Espresso,但是我们仍然有一些疑问,因为我们有一台装有Jenkins的CI机器。 Espresso使用的是Robotium ,而Robotium使用的是第一个,我们希望能够同时使用两个测试框架。可能吗?我们如何在文件中指定呢?我们如何配置我们的詹金斯机器,以针对不同的测试框架执行不同的任务? 我知道Esp

  • 问题内容: 我正在使用Hibernate Validator 4.0.2,Spring 3.0和Hibernate 3.3.2(据我所知,是JPA2之前的版本)作为JPA 1提供程序。 我发现将Validator集成到MVC层很容易(这是可行的),但是看不到如何将验证器自动集成到JPA entityManager(JPA 1)中。 基本上,我有一些实体将保留下来,但它们不是来自Web层,因此尚未经

  • 问题内容: 我是Python的新手,并且开始自学使用PyQT4.7和Python 2.6进行GUI编程(希望如此) 我刚刚从PyQT网站下载了整个PyQT / QT4软件包(包括QTDesigner),但是看起来QTDesigner看起来像个新手,因为每个小部件都看起来很棒(因为您可以看到所有属性/属性/默认设置等)编辑属性很棒,但是PyQT似乎没有设置QTDesigner与PyQT和PyQTs