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

JPA准则将连接准则转化为析取准则

程承恩
2023-03-14

我需要将此查询复制到JPA CriteriaBuilder代码中:

....
where
     article.client_id = 1 
     and article.price > 0
     and (
           article.code like '%this is statement%' 
           or article.oem_code like '%this is statement%'
           or ( 
               article.description like '%this%'
               and article.description like '%is%'
               and article.description like '%statement%'
           )    
     )

这是我的代码:

...

Root<Article> article = cq.from(Article.class);

List<Predicate> predicates = new ArrayList<Predicate>();

predicates.add(cb.equal(article.get(Article_.clientId), filter.getClientId()));

predicates.add(cb.greaterThan(article.get(Article_.price), BigDecimal.ZERO));

String searchQuery = filter.getSearchQuery();

Predicate disjunction = cb.disjunction();

disjunction.getExpressions().add(cb.like(article.get(Article_.code), "%" + searchQuery + "%"));
disjunction.getExpressions().add(cb.like(article.get(Article_.oem_code), "%" + searchQuery + "%"));

List<Predicate> andPredicate = new ArrayList<Predicate>();

for (String str : searchQuery.split(" ")) {
   andPredicate.add(cb.like(article.get(Article_.description), "%" + str + "%"));    
}

共有1个答案

景景胜
2023-03-14

这就是我所做的,看起来效果很好:

...  
Predicate pr1 = cb.like(article.get(Article_.code), "%" + searchQuery + "%");
Predicate pr2 = cb.like(article.get(Article_.oem_code), "%" + searchQuery + "%");
Predicate pr3 = cb.conjunction();

for (String str : busquedaSplit) {
    Predicate newPredicate = cb.like(article.get(Article_.description), "%" + str + "%");
    pr3 = cb.and(pr3, newPredicate);
}

disjunction = cb.or(pr1, pr2, pr3);

predicates.add(disjunction);
 类似资料:
  • 感谢加入! 我们对 Flarum 充满信心与激情,也很高兴认识同样的人。我们希望每位用户都能充分利用 Flarum 和 Flarum 社区,因此,请您阅读并遵守以下准则。无论您是使用我们的论坛,还是在 Discord、GitHub 上交流,亦或是在其他平台进行任何形式的交流,这些准则均适用。 我们在这里探讨与 Flarum 有关的事情,并努力使她成长为一个更完美的程序。批判思维(当然,得通过合理的

  • 我需要创建一个“真正的”动态JPA。我得到一个语句。看起来像: 更新和解决方案得到了两个列表,第一个列表为和工作良好。第二个列表包含或语句,如exspected:

  • Material Design 使用的基本工具来源于印刷设计,例如通用于所有页面的基准线和删格。布局排版能够按比例横跨不同尺寸的屏幕,促进 UI 开发和从根本上帮助你做可扩展的 apps。 布局指南也通过使用相同的视觉元素,结构网格,和通用的行距规则,让 app 在不同平台与屏幕尺寸上拥有一致的外观和感觉。结构和视觉上的一致创造了一个可识别的跨平台产品的用户环境,它给用户提供高度的熟悉感和舒适性,

  • 问题内容: 有没有资源可以解释用于秋千的GUI设计?像这样的最佳做法。 问题答案: 由于Swing在许多不同的平台上工作,因此不再严格遵循设计准则。Sun很久以前就写过文章,但从未更改过,因此,如果您认为有帮助,我想读一读。这是一些有关进行秋千开发的实用知识。 切勿使用GridBagLayout。抓取TableLayout。它从根本上简化了Swing UI的布局。GridBagLayout是魔鬼。

  • 我有以下三个类的模型。A类包含1个B,也可以包含0个或更多个C。B类和C类都包含我想在A类范围内一起求和的金额。 有人知道在Hibernate条件中是否可以向FROM-子句提供子查询吗?多谢! (已更新) 显然,在内部查询中添加一个指向外部查询的附加筛选器解决了这个问题。要从子查询中引用父查询实体,请使用神奇的关键字“this”。

  • 问题内容: 是否有关于Java中异常传播的准则? 何时在方法签名中添加例外?例如:如果仅当缺少必要的程序资源时才引发异常,并且只能在顶层进行处理,那么是否可以将所有使用erring方法的方法传播给使用此异常的所有方法? 有没有好的做法?有不良做法吗? 很抱歉,如果我含糊不清,但是我只是在寻求有关异常的编程风格的(一般)建议。 问题答案: 过去对我有帮助的准则包括: 当方法无法处理异常时引发异常 ,