【问题标题】:Exclude query condition if argument of function is null如果函数的参数为​​空,则排除查询条件
【发布时间】:2017-07-24 09:37:15
【问题描述】:

如果token 为空而不重复查询,是否可以忽略cb.equal(myClass.get(MyClass_.token), token)?如果完全重复查询(只跳过一个条件),我不想将它打包成巨大的。

private MyClass find(String code, String token) {
    CriteriaBuilder cb = entityManager.getCriteriaBuilder();
    CriteriaQuery<MyClass> cq = cb.createQuery(MyClass.class);
    Root<MyClass> myClass = cq.from(MyClass.class);
    cq.select(myClass).where(
            cb.and(cb.equal(myClass.get(MyClass_.code), code),
                    cb.equal(myClass.get(MyClass_.token), token),
                    cb.greaterThan(myClass.get(MyClass_.expirationDate), DateUtils.getTime())
            ));
    ....
}

【问题讨论】:

    标签: hibernate jpa criteria-api


    【解决方案1】:

    执行以下操作。请注意,我只是对您的代码进行了文本编辑,并没有实际检查语法错误或编译它

    private MyClass find(String code, String token) {
        CriteriaBuilder cb = entityManager.getCriteriaBuilder();
        CriteriaQuery<MyClass> cq = cb.createQuery(MyClass.class);
        Root<MyClass> myClass = cq.from(MyClass.class);
        Predicate predicate = cb.and(
                cb.equal(myClass.get(MyClass_.code), code),
                cb.greaterThan(myClass.get(MyClass_.expirationDate), DateUtils.getTime())
        );
        if (token != null)
            predicate = cb.and(predicate, cb.equal(myClass.get(MyClass_.token), token));
    
        cq.select(myClass).where(predicate);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-09-01
      • 1970-01-01
      • 2016-12-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多