对多列使用条件生成器的JPA搜索查询



我正试图用标准生成器对我的实体进行通用搜索,其中给定的文本与实体中的所有列相匹配。

String likeSearchText = "%" + searchText + "%";
List<Customer> searchedCustomers = null;
CriteriaBuilder builder = entityManager.getCriteriaBuilder();
CriteriaQuery query = builder.createQuery(Customer.class);
Root <Customer> root = query.from(Customer.class);
ArrayList<Predicate> conditions = new ArrayList<>();
conditions.add(builder.like(root.<String>get("firstName"), likeSearchText));
conditions.add(builder.like(root.<String>get("lastName"), likeSearchText));
conditions.add(builder.like(root.<String>get("middleName"), likeSearchText));
conditions.add(builder.like(root.<String>get("companyName"), likeSearchText));
conditions.add(builder.like(root.<String>get("industry"), likeSearchText));
query.where(builder.or(conditions.toArray(new Predicate[conditions.size()])));
query.select(root);
searchedCustomers = entityManager.createQuery(query).getResultList();
return searchedCustomers;

当我运行这个方法时,我总是得到一个空列表。我尝试将like更改为notLike,通过给我一个包含与给定搜索文本不同的元素的列表,效果非常好,所以我真的很困惑我的like方法出了什么问题。任何形式的帮助都将不胜感激!

我在进行一些测试时遇到了类似的问题,并且在类路径中有相同(简单(名称的实体。例如,有这样的实体:

org.example.one.Customer
org.example.two.Customer

如果您没有明确设置不同的表名,如:

package org.example.one;
@Entity("customer_one")
public class Customer { ...

package org.example.two;
@Entity("customer_two")
public class Customer { ...

休眠可能:

  • 在db中的同一个表中混合内容
  • 构造查询时尝试从错误的表中查找字段

而且我认为你不需要这个:

query.select(root);

相关内容

  • 没有找到相关文章

最新更新