Spring Jpa按示例集合查询

时间:2018-04-30 18:30:27

标签: spring-boot spring-data-jpa query-by-example

假设我有一个实体

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

有没有办法可以通过示例查询找到任何名叫詹姆斯同时拥有法拉利和兰博基尼的人?

如果我使用:

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);

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

1 个答案:

答案 0 :(得分:1)

您可以使用查询方法。让我们说你的Car有一个属性name可以是&#34;兰博基尼&#34;或&#34;法拉利&#34;

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

然后你就这样使用它:

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

一些陷阱:

method参数可以采用Collection的任何子类或数组。

Person和Car上的属性名称必须与方法签名和参数名称匹配,如上所示,spring知道如何生成查询,即Person必须有一个名为&#34; cars&#34;和Car的属性必须有一个名为&#34; name&#34;。

的属性

我使用了JpaRepository,但这适用于Spring数据JPA提供的任何Repository接口