spring data jpa 利用JpaSpecificationExecutor做分页查询时候,关联表条件设置方法

我们使用JpaSpecificationExecutor的方法Page findAll(Specification spec, Pageable pageable);做分页查询,有时候查询T实体类会关联其他实体类,并且根据该实体类某个字段作为条件传入查询值,那么该如何设置这个关联对象呢?解决方法如下:

public Specification getSpecification() {
    Specification specification = new Specification() {

        @Override
        public Predicate toPredicate(Root root, CriteriaQuery query, CriteriaBuilder cb) {
            List list = new ArrayList<>();
            
            Join join = root.join("homeRoom", JoinType.LEFT);
            Predicate roomSidPre = cb.equal(join.get("ownerPhone"), "13600539847");
            list.add(roomSidPre);
            
            return cb.and(list.toArray(new Predicate[list.size()]));
        }
    
    };
    return specification;
}

代码中的License类对象与HomeRoom类对象是一对一关系,License类中的homeRoom属性定义如下:

@OneToOne
@JoinColumn(name ="room_sid", insertable = false, updatable = false)
private HomeRoom homeRoom;

这样子就可以通过上面的代码设置HomeRoom类中ownerPhone字段为查询条件了。

你可能感兴趣的:(spring data jpa 利用JpaSpecificationExecutor做分页查询时候,关联表条件设置方法)