条件 Api:Order/Select 通过隐式相关 table

Criteria Api: Order/Select by implicit related table

我尝试构建一个提供以下功能的 CriteriaQuery:

我有三个表,其中包含以下字段:

table_a:

id, name_a

table_b:

id, name_b

table_ab:

id_a, id_b

现在我想从 table_a 中获取所有元素,这些元素按 table_b 中相应元素的 name_b 字段排序。

结果应该是 JpaRepository 中的使用规范。我尝试使用联接,但我一直停留在如何合并联接的问题上:

Specification<TableA> specification = (root, query, cb) -> {
        CriteriaQuery<TableAb> abQuery = cb.createQuery(TableAb.class);
        CriteriaQuery<TableB> bQuery = cb.createQuery(TableB.class);

        Root<TableAb> abRoot = abQuery.from(TableAb.class);
        Join<TableAb, TableA> aJoin = abRoot.join("tableA");
        Join<TableAb, TableB> bJoin = abRoot.join("tableB");

        //combine joins

        query.orderBy(cb.asc(/* Expression to order by */));
        return cb.conjunction();
    };

在我看来,主要问题是 table_a 到 table_b 之间没有 "path",但我明确不想在 [=34= 中有任何引用] 到 table_b.

因为你使用的是 Spring Data JPA ,你可以创建一个接口,上面有一个方法,如下所示:

public interface TableABRepository extends Repository<TableAB, Long> {

  public List<TableAB>  findAllByOrderByTableB();

}

假设您的 TableAB class 是这样的:

    class TableAB {
        TableA tableA;
        TableB tableB;
    }

Thak 方法将 return 来自 table_ab 的所有元素按 name_b 字段排序。

之后,您只需从 TableAB returned 列表中获取 TableA 元素。