是否可以在SpringDataJPA中的另一个实体中重用规范?

是否可以在SpringDataJPA中的另一个实体中重用规范?,spring,spring-data-jpa,Spring,Spring Data Jpa,鉴于这些实体: public class Parent { private List<Child> children; // others fields } public class Child { private Parent parent; // others fields } 将规范转换为谓词以在ChildSpecs中使用它似乎是一个好的解决方案吗 当我们应该使用根时,如何使用根?根类型基本上是指SQL查询的FROM部分。要获取另一个根,

鉴于这些实体:

public class Parent {
    private List<Child> children;

    // others fields
}

public class Child {
    private Parent parent;

    // others fields
}
将规范转换为谓词以在
ChildSpecs
中使用它似乎是一个好的解决方案吗


当我们应该使用
根时,如何使用

类型基本上是指SQL查询的FROM部分。要获取另一个根,您需要一个子查询:

return (child, query, criteriaBuilder) -> {
  final Subquery<ReturnType> subquery = query.subquery(ReturnType.class);
  final Root<Parent> subroot = subquery.from(Parent.class);
  subquery.select("parentField");
  // call shared code
  return criteriaBuilder.equal(subquery, child.get("something"));
}

我更喜欢使用带有连接和where子句的谓词,而不是子查询,但这是一个潜在的好线索。不幸的是,使用query.from(Parent.class)创建交叉连接
return (child, query, criteriaBuilder) -> {
  final Subquery<ReturnType> subquery = query.subquery(ReturnType.class);
  final Root<Parent> subroot = subquery.from(Parent.class);
  subquery.select("parentField");
  // call shared code
  return criteriaBuilder.equal(subquery, child.get("something"));
}
SELECT ... FROM child c WHERE c.something = (
  SELECT parentField FROM parent WHERE (...shared conditions...)
);