How to search through array in Spring Boot CrudRepository

蓝咒 提交于 2019-12-01 06:50:27

问题


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!


回答1:


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)



回答2:


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!