Say, I have the following entity class:
Person.java
@Entity
public class Person {
@Id
private String name;
private String[] cars;
// Constructor, getters and setters
}
And the repository:
PersonRepository.java
public interface PersonRepository extends CrudRepository<Person, String> {
// this is unclear!
List<Person> getAllByCars...(String car)
}
Is there a method that returns all persons, whose car array contains one given car (the String parameter above)?
For me, it seems that all supported JPA keywords can only deal with single elements, but not with arrays.
Thanks for help!
Ideally, You should declare cars as a separate Entity like this
@Entity
public class Person {
@Id
private String name;
private List<Car> cars;
// Constructor, getters and setters
}
If not you should change Array to List at the least. change
private String[] cars;
to
@ElementCollection
private List<String> cars;
Then You have to write a Query like this
@Query("select p from Person p WHERE :car in elements(p.cars)")
List<Person> getAllByCars...(@Param("car") String car)
I'm guessing at how you are currently storing the cars information and suggesting a possible solution:
@Entity
public class Car {
@Id
private String name;
@Column
private String person_name;
}
public interface CarRepository extends JpaRepository<Car, String> {
//Result will have all cars with the person_name identifying the Person @Entity
List<Car> findByName(String name);
}
来源:https://stackoverflow.com/questions/48424575/how-to-search-through-array-in-spring-boot-crudrepository