How to search through array in Spring Boot CrudRep

2019-02-27 06:07发布

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!

2条回答
做个烂人
2楼-- · 2019-02-27 06:30

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)
查看更多
霸刀☆藐视天下
3楼-- · 2019-02-27 06:37

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);
}
查看更多
登录 后发表回答