当前位置: 首页 > 知识库问答 >
问题:

如何在Spring Boot Crudepository中搜索数组

茹航
2023-03-14

比如,我有以下实体类:

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)
}

是否有一个方法返回所有人,其car数组包含一个给定的car(上面的String参数)?

对我来说,似乎所有支持的JPA关键字都只能处理单个元素,而不能处理数组。

谢谢你的帮助!

共有2个答案

贲骏喆
2023-03-14

我在猜测您当前是如何存储汽车信息的,并提出一个可能的解决方案:

@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);
}
梁丘亦
2023-03-14

理想情况下,您应该像这样将汽车声明为一个单独的实体

@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)
 类似资料:
  • 问题内容: 我有一个JSON数组 我将如何搜索8097并获取内容? 问题答案: 使用该函数将JSON字符串转换为对象数组,然后遍历该数组直到找到所需的对象:

  • 这是我的阵列 我想做的是:写一个函数 例如:将返回18将返回19等等

  • 问题内容: 如何使用preg_match在数组中搜索? 例: 问题答案: 在这篇文章中,我将为您提供三种不同的方法来满足您的要求。 我实际上建议使用最后一个代码段,因为它最容易理解并且代码简洁。 如何查看数组中与我的正则表达式匹配的元素? 有专门用于此目的的功能。它将一个正则表达式作为第一个参数,并将一个数组作为第二个参数。 请参见以下示例: 输出 但是我只想获取指定组的值。怎么样? 与能解决清洁

  • 假设mongodb文档(表)“users”为 我想找到1975年必须获得“国家奖章”的人,可能还有其他人在不同的年份获得该奖项。 我怎样才能找到这个人使用奖励类型和年份。所以我可以得到确切的人。

  • 问题内容: 假设mongodb文档(表)“用户”为 我想找到获得“国家奖章”的人,必须在1975年获得该奖。可能会有其他人在不同的年份获得此奖。 如何使用奖励类型和年份查找此人。这样我就可以找到确切的人。 问题答案: 正确的方法是: 允许您在同一数组元素中匹配多个组件。 没有mongo的用户会在1975年代和某些奖项中寻找获得National Medal的用户,但不会寻找1975年获得Nation

  • 我刚开始使用hibernate lucene搜索。从几天以来,我一直致力于搜索关键字与特殊字符。我正在使用MultiFieldQueryParser进行精确短语匹配以及布尔搜索。但在这个过程中,我无法得到搜索关键字的结果,如“有1年以上的经验”,如果我没有在搜索关键字周围添加任何引号,那么我就得到了结果。所以我在执行lucene查询时观察到的是,它正在转义特殊符号(+)。我正在使用Standard