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

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

public Specification<License> getSpecification() {
    Specification<License> specification = new Specification<License>() {

        @Override
        public Predicate toPredicate(Root<License> root, CriteriaQuery<?> query, CriteriaBuilder cb) {
            List<Predicate> list = new ArrayList<>();
            
            Join<License, HomeRoom> 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字段为查询条件了。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容