【问题标题】:How to apply all In clause and fetch the list using criteria in Spring JPA如何应用所有 In 子句并使用 Spring JPA 中的条件获取列表
【发布时间】:2020-11-13 16:40:36
【问题描述】:
  public class RequestClass{
       private String[] a1;
       private String[] a2;
       private String[] a3;
       private String[] a4;
   }
    public class Entity{
        private String a1;
        private String a2;
        private String a3;
        private String a4;
    }

我有一个下面的 sql 查询来映射如何应用条件来使用 spring JPA 获取记录

select * from entity  where a1 in ('26') 
                      and a2 in ('1','2','3') 
                      and a3 in ('43') 
                      and a4 in ('1');
    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery<Object> criteriaQuery = criteriaBuilder.createQuery();
    
    Root<Entity> root = criteriaQuery.from(Entity.class);
    Expression<String> aExpression = root.get("a1");
    
    Predicate predicate = aExpression.in(RequestClass.geta1());    
    Expression<String> bExpression = root.get("a2");
    
    Predicate predicate = bExpression.in(RequestClass.geta2());   
    Expression<String> cExpression = root.get("a3");
    
    Predicate predicate = cExpression.in(RequestClass.geta3());   
    Expression<String> dExpression = root.get("a4");  
    
    Predicate predicate = dExpression.in(RequestClass.geta4());

我已经google了但是没有找到解决办法

【问题讨论】:

  • 你试过下面的答案了吗?

标签: spring spring-boot spring-data-jpa entitymanager hibernate-criteria


【解决方案1】:
    CriteriaBuilder criteriaBuilder = entityManager.getCriteriaBuilder();
    CriteriaQuery<Entity> criteriaQuery = 
                               criteriaBuilder.createQuery(Entity.class);
    Root<Entity> root = criteriaQuery.from(Entity.class);

    Expression<String> aExpression = root.get("a1");
    Predicate predicate1 = aExpression.in(RequestClass.geta1());

    Expression<String> bExpression = root.get("a2");
    Predicate predicate2 = bExpression.in(RequestClass.geta2());

    Expression<String> cExpression = root.get("a3");
    Predicate predicate3 = cExpression.in(RequestClass.geta3());

    Expression<String> dExpression = root.get("a4");  
    Predicate predicate4 = dExpression.in(RequestClass.geta4());

    Predicate andPredicate
      = criteriaBuilder.and(predicate1, predicate2, predicate3, predicate4);

    criteriaQuery.where(andPredicate);
    List<Entity> results = 
                 entityManager.createQuery(criteriaQuery).getResultList();

【讨论】:

    猜你喜欢
    • 2018-06-08
    • 2016-11-07
    • 2021-10-15
    • 1970-01-01
    • 2018-07-10
    • 2017-11-18
    • 2019-07-26
    • 2016-05-07
    相关资源
    最近更新 更多