在本週中,想完成一個經過標籤過濾的功能,雖然如今仍是沒寫出來,可是在這個過程當中,仍是加深了對spring jpa的理解。spring
開始的時候的想法須要用到子查詢,因此就查詢學習了一下。sql
subquery 即子查詢,是數據庫的基本操做,下面咱們以一個例子來學習:數據庫
如今咱們有兩張表klass
和course
他們的關係是多對多,
如今咱們要經過課程名查找上課的班級(是否是感受畫蛇添足?說實話,我也以爲,但我們的重點是學習subquery的用法)學習
// 查詢的課程名 public List<Klass> getAll(String courseName) { return this.klassRepository.findAll((Specification<Klass>) (root, query, builder) -> { // 查詢的結果的類型 Subquery<Klass> courseSubquery = query.subquery(Klass.class); // 從那裏查詢 select * form ... 中的form... Root<Course> courseRoot = query.from(Course.class); // 鏈接兩個表 Join<Course, Klass> klassJoin = root.join("klasses"); // select 查詢結果,where即查詢條件 courseSubquery.select(klassJoin) .where(builder.equal(courseRoot.get("name"), courseName)); return builder.in(root).value(courseSubquery); }); }
對應的sql語句爲ui
SELECT klass FROM Klass klass WHERE klass IN ( SELECT klassJoin FROM Course course JOIN course.klasses klassJoin WHERE couser.name = :courseName )