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

Spring数据/SQL查询,按集合查找所有匹配项

宰父深
2023-03-14

您能建议如何在Spring Data JPA存储库中编写查询吗?情况是这样的:我有两个实体:客户和产品,关系为“OneToMany”——意味着一个客户可能有多个产品。在代码中,看起来客户实体已经设置了产品,产品引用了客户,非常简单。如果我从DB JSON中检索Customer,将如下所示:{“id”:10,“name”:'John Smith',“personalCode”:12345678,“products”:[{“id”:15,“type”:“productType1”},{“id”:20,“type”:“productType2”}]}

问题是,我如何向DB写入查询,以查找其产品与通过产品集合的产品匹配的所有客户?例如,我想找到所有拥有type1和type2产品的客户。谢谢!

@Entity
@Table(name = "customer")
public class Customer {

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

private String name;

private int age;

private String personalCode;

@Enumerated(EnumType.STRING)
private Country country;

private String internetBankUserId;

@Enumerated(EnumType.STRING)
private CustomerType type;

@JsonManagedReference
@OneToMany(mappedBy = "customer", cascade = CascadeType.ALL)
@SortNatural
private SortedSet<Product> products = new TreeSet<>();
@Entity
@Table(name = "product")
public class Product implements Comparable<Product>{

@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long id;

@Enumerated(EnumType.STRING)
private ProductType type;

@JsonBackReference
@ManyToOne(cascade = CascadeType.ALL)
@JoinColumn(name = "customer_id")
private Customer customer;

共有1个答案

仲孙思源
2023-03-14

这个解决方案对我有效:

@Query("SELECT c FROM Customer c join  c.products p where p.type in :products 
       and SIZE(c.products) >= :count")
Set<Customer> findAllByProductType (@Param("products")Set<ProductType> products,
                                    @Param("count") Integer count );
 类似资料:
  • 更新这里是我的存储库 这是我的实体

  • 问题内容: 我目前正在做类似物物交换系统的系统。这样的情况。客户(茉莉花)需要输入“ NAME”属性(她必须寻找的内容)并输入“ SEEK”属性(她需要寻找的内容)。为了获得结果,“ SEEK”属性必须与其他客户的“名称”属性匹配,而其他客户的“ SEEK”属性必须与Jasmine的“ HAVE”属性匹配。 例如我有表项(已经在数据库中) 例如,茉莉花具有“名称”属性的耳机和“搜索”属性的笔记本电

  • 问题内容: 如果我有一个看起来像这样的表: 还有一个THINGS表,如下所示: 我正在尝试提出一个纯SQL查询,该查询可以让我找出什么可以访问什么。基本上,我想要一个看起来像这样的查询: 并返回“ John”和“ Mary”。关键是访问事物所需的许可数量是任意的。 我觉得这应该很明显,但是我无法提出一个优雅的解决方案。首选与Oracle兼容的解决方案。 编辑: Kosta和JBrooks的解决方案

  • 我对mongo很陌生,我正在尝试用两个查询从收集中获取所有数据,我有条目,每个条目都有startdate。我需要得到所有的数据,首先所有项目的开始日期低于当前日期排序的DESC和跟随其余数据的开始日期大于或等于当前日期排序的asc。我不知道该怎么做。很抱歉我的英语不好,我是新手。 我在下一条路上试过这样做 但如果可能的话,我想通过一个查询来实现

  • 问题内容: 我真的很不擅长SQL,我想知道我可以使用哪种SQL解决这个问题,在这个问题以下我怀疑是NP完全问题,但是我认为查询需要很长时间才能在大型数据集上运行因为这将作为后台任务完成。首选标准sql语句,但是如果需要存储过程,则使用它。SQL必须在Postgres 9.3上运行。 问题:给定一组包含一组关键字的文章,请为每条包含最多匹配关键字的文章查找前n条文章。 文章表的精简版本如下所示: 这