Spring Jpa Query by Example collection

Допустим, у меня есть сущность

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

Есть ли способ, которым я могу использовать запрос за примером, чтобы найти любого человека по имени Джеймс, имеющего как Ferrari, так и Lamborghini?

Если я использую:

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 ответ

Решение

Вы можете использовать метод запроса для этого. Скажем ваш Car имеет свойство name это может быть "Lamborghini" или "Ferrari"

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

Тогда вы используете это так:

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

Некоторые ошибки:

Параметр метода может принимать любой подкласс класса Collection или массив.

Имена свойств Person и Car должны соответствовать сигнатуре метода и имени параметра, как показано выше для Spring, чтобы знать, как генерировать запрос, т.е. Person должен иметь свойство с именем "cars", а Car должен иметь свойство с именем "name".,

Я использовал JpaRepository, но это работает с любым из интерфейсов Repository, предоставляемых с данными Spring JPA

Другие вопросы по тегам