Spring JPA规范Where条件括号

问题描述 投票:0回答:2

我如何使用 spring JPA 规范来满足以下条件:

其中 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 < ? and docrecord0_.attempt_count<3 or docrecord0_.attempt_count=0

java spring spring-data-jpa
2个回答
3
投票

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

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

spec 实际上等于 (spec1 OR spec2) AND spec3


0
投票

这是 Hibernate show_sql 输出的一个已知格式问题。实际的SQL查询是正确的,并且使用适当的括号可以正确执行,但是show_sql显示有格式问题。您可以通过以下方式验证:

spring.jpa.properties.hibernate.use_sql_comments=true
© www.soinside.com 2019 - 2024. All rights reserved.