Spring Jpa Query by Example collection - PullRequest
0 голосов
/ 30 апреля 2018

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

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

0 голосов
/ 30 апреля 2018

Вы можете использовать метод запроса для этого. Допустим, у вашего 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 должно иметь свойство с именем "имя".

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

...