Spring Jpa Query by Example 集合

Spring Jpa Query by Example collection

假设我有一个实体

public class Person {
    private String id;
    private String firstname;
    private String lastname;
    private Set<Car> ownedCars;
}

有没有一种方法可以使用示例查询来查找任何名为 James 的人同时拥有法拉利和兰博基尼?

如果我使用:

Person p = new Person();
p.setName("James");
p.getOwnedCars.addCar(new Car("Lamborgnihi"));
p.getOwnedCars.addCar(new Car("Ferrari"));
Example<Person> exampleOfPerson = Example.of(p);
List<Person> foundPersons = personRepository.finaAll(exampleOfPerson);

它似乎只查询人的属性并忽略任何子集合。

您可以为此使用查询方法。假设您的 Car 有一个 属性 name 可以是 "Lamborghini" 或 "Ferrari"

interface PersonRepository extends JpaRepository<Person, String> {
  List<Person> findByOwnedCarsNameIn(Collection<String> names);
}

然后你这样使用它:

personRepository.findByOwnedCarsNameIn(Arrays.asList("Ferrari","Lamborghini"));

一些陷阱:

方法参数可以是Collection的任意子类,也可以是数组。

Person 和 Car 上的 属性 名称必须与上面显示的方法签名和参数名称匹配,spring 才能知道如何生成查询,即 Person 必须有一个 属性 称为 "cars",Car 必须有一个 属性 称为 "name"。

我使用了 JpaRepository,但这适用于 spring data JPA

提供的任何 Repository 接口