标准Api:按隐式相关表排序/选择

时间:2016-05-24 09:48:40

标签: java mysql spring-data-jpa criteria criteria-api

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

我有三个包含以下字段的表:

表-A:

id, name_a

table_b:

id, name_b

table_ab:

id_a, id_b

现在我想从table_b中相应元素的name_b字段中获取table_a中的所有元素。

结果应该是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没有“路径”,但我明确地不希望在table_a到table_b中有任何引用。

1 个答案:

答案 0 :(得分:0)

由于您使用的是 Spring Data JPA ,因此您可以使用上面的方法创建一个界面,如下所示:

public interface TableABRepository extends Repository<TableAB, Long> {

  public List<TableAB>  findAllByOrderByTableB();

}

假设您的TableAB类是这样的:

    class TableAB {
        TableA tableA;
        TableB tableB;
    }

Thak方法将返回name_b字段排序的table_ab中的所有元素。

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