1. 程式人生 > >springboot JPA 一對多關聯查詢 ,動態復雜查詢 去除重復數據 in語句使用

springboot JPA 一對多關聯查詢 ,動態復雜查詢 去除重復數據 in語句使用

query pri predicate list cat cut 單向 查詢 group

目的:根據圖書的發布地區查詢圖書信息
實現步驟:
1 實體配置
one: 圖書信息 book
many: 地區信息 bookarea
實體映射,單向映射 book 中增加 area 的集合 並設置 @JoinColumn(name="bookid")
@OneToMany
bookarea中不需要設置關系

  1. 編寫查詢語句
    Repository 繼承 JpaSpecificationExecutor
    重寫findAll 並實現 Specification接口的 public Predicate toPredicate(Root<Book> root, CriteriaQuery<?> query, CriteriaBuilder criteriaBuilder)方法

    關聯其他表需要使用到 Join
    Join<Book,BookArea> areaJoin = root.join("bookAreaList",JoinType.LEFT);
    ps: bookAreaList 為 book 實體中的 OneToMany 屬性

    3 根據地區編碼查詢,可選擇多個地區編碼,我們需要使用到in 語句處理
    In<Object> in = criteriaBuilder.in(areaJoin.get("areaCode"));
    areaCode 為 bookarea 實體中的 屬性。

  2. 多表查詢需要過對一下重復數據,使用 group by

    query.groupBy(root.get("id")) ;

    總結完畢

springboot JPA 一對多關聯查詢 ,動態復雜查詢 去除重復數據 in語句使用