java - Spring JPA 规范 Where 条件括号

标签 java spring spring-data-jpa

我如何将 spring JPA 规范用于 where 条件如下:

其中 cond1 和(cond2 或 cond3)



其中(cond1 和 cond2)或 cond3 .

规范代码如下:

Specification<DocRecord> updatedAtAndCountGTZeroSpec = new Specification<DocRecord>() {

    @Override
    public Predicate toPredicate(Root<DocRecord> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
        return cb.or(
            (cb.and(
                cb.lessThanOrEqualTo(root.get("updatedAt"),new Timestamp(now.getTimeInMillis())),
                cb.lessThan(root.get("attemptCount"), 3))
            ),
            (cb.equal(root.get("attemptCount"), 0))
        );
    }
};

以上是生产条件如下:

哪里 docrecord0_.updated_at < ?
和 docrecord0_.attempt_count<3
或 docrecord0_.attempt_count=0

最佳答案

您可以构建“OR”规范,然后为第一个规范添加“AND”规范

Specification<?> spec = spec1.or(spec2);
spec = spec.and(spec3);

spec is actually equal to (spec1 OR spec2) AND spec3

关于java - Spring JPA 规范 Where 条件括号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55180004/

相关文章:

java - 如何将二维数组的每个 int 元素转换为字符串?

java - ANT eclipse headless 构建 - java.lang.NoClassDefFoundError

java - com.sun.mail.handlers.text_plain无法转换为javax.activation.DataContentHandler

java - 此代码段如何将输出输出为 7?

java - 从一个tomcat服务器获取数据到另一个tomcat服务器

java - 不满意的依赖异常 : Error creating bean with name 'trafficMapper'

使用 Maven 运行时会跳过 Spring 测试

java - 当抛出应用程序异常时,Hibernate saveAndFlush 不会持久化

java - 如何在 Spring MVC 中使用乐观锁

java - 表单和实体类的用法