是否可以为OneToMany实体加入两个规范

时间:2020-05-29 13:07:11

标签: spring-data-jpa spring-data

我有这个实体结构:

@Entity
public class Parent {
  @Id
  private UUID id;

  @OneToMany
  private Set<Child> children;
}

@Entity public class Child {
  @Id
  private UUID id;

  private String name;

  private int age;
}

我从外部库中获得了两个规范。这些规范中的每一个都有针对儿童领域的谓词。逻辑与此类似:

Specification<Parent> childNameSpecification = (root, query, builder) -> {
  Path<Object> childName = root.join("children").get("name");
  return builder.equal(childName, name);
};
Specification<Parent> childAgeSpecification = (root, query, builder) -> {
  Path<Object> childAge = root.join("children").get("age");
  return builder.equal(childAge, age);
};

如果我使用and联接这两个规范,则在结果查询中将得到两个不同的联接。这就是我加入这些规范的方式:

Specification<Parent> parentSpecification = Specification.where(childNameSpecification).and(childAgeSpecification);

我得到这个查询结果:

select parent0_.id as id1_1_
from parent parent0_
inner join child children1_
  on parent0_.id = children1_.parent_id
inner join child children2_
  on parent0_.id = children2_.parent_id
where children2_.name = ?
  and children1_.age = ?

是否可以将这些规范连接在一起,以在结果查询中获得一个连接?这是预期的查询:

select parent0_.id as id1_1_
from parent parent0_
inner join child children1_
  on parent0_.id = children1_.parent_id
where children1_.name = ?
  and children1_.age = ?

0 个答案:

没有答案
相关问题