我尝试构建一个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中有任何引用。
答案 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元素。