如何在 Spring Boot CrudRepository 中搜索数组
Posted
技术标签:
【中文标题】如何在 Spring Boot CrudRepository 中搜索数组【英文标题】:How to search through array in Spring Boot CrudRepository 【发布时间】:2018-07-03 14:55:40 【问题描述】:说,我有以下实体类:
Person.java
@Entity
public class Person
@Id
private String name;
private String[] cars;
// Constructor, getters and setters
还有存储库:
PersonRepository.java
public interface PersonRepository extends CrudRepository<Person, String>
// this is unclear!
List<Person> getAllByCars...(String car)
有没有一种方法可以返回所有人,其汽车数组包含一辆给定的汽车(上面的字符串参数)?
对我来说,似乎所有受支持的 JPA 关键字都只能处理单个元素,而不能处理数组。
感谢您的帮助!
【问题讨论】:
汽车不应该是另一个实体吗? 【参考方案1】:理想情况下,您应该像这样将汽车声明为单独的实体
@Entity
public class Person
@Id
private String name;
private List<Car> cars;
// Constructor, getters and setters
如果不是,您至少应该将 Array 更改为 List。 改变
private String[] cars;
到
@ElementCollection
private List<String> cars;
那么你必须像这样写一个查询
@Query("select p from Person p WHERE :car in elements(p.cars)")
List<Person> getAllByCars...(@Param("car") String car)
【讨论】:
感谢您的回答!您建议的查询起到了作用。由于我在这个例子中只使用了一个字符串列表,我看不出有理由为此实现一个单独的实体 b.t.w.我必须用 @ElementCollection 注释汽车才能使其工作 抱歉忘记提了。更新了答案 在将 String[] 更改为 List我猜测您当前如何存储汽车信息并提出可能的解决方案:
@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);
【讨论】:
以上是关于如何在 Spring Boot CrudRepository 中搜索数组的主要内容,如果未能解决你的问题,请参考以下文章
spring boot学习02如何在spring boot项目中访问jsp
如何在 spring-boot 中替换最新的 Jetty 9?
如何在 spring-boot 中配置 Jetty(很容易?)
如何在 spring-boot-2 中添加 WebRequestTraceFilter?
如何在 gradle 中获取 spring-boot 依赖版本?
如何在不从 spring-boot-starter-web 继承的情况下在 Spring Boot 中获取 ObjectMapper 实例?