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