1

我有以下名为“UserInterest”的类。它遵循以下定义:

@Table(name = "user_interests")
public class UserInterest {
  @Id
  @GeneratedValue(strategy = GenerationType.SEQUENCE, generator = "user_interest_pk_generator")
  @SequenceGenerator(name = "user_interest_pk_generator", sequenceName = "user_interest_id_seq", 
  allocationSize = 1)
  @Column(name = "user_interest_id")
  private int userInterestId;

  @Column(name = "user_id", nullable = false)
  private int userId;

  @ElementCollection
  @CollectionTable(name = "user_interest_ids")
  @Column(name = "interest_id")
  private List<Integer> interests;
}

JPA 自动创建嵌入表user_interest_ids、集合表。

此类工作正常,用户兴趣被正确保存。

现在我需要根据特定兴趣列表过滤用户。

假设我有以下user_interest列表:

在此处输入图像描述

CollectionTable 看起来像这样:

在此处输入图像描述

我想找到拥有interest id 3. 在 PostgreSQL 的 pgAdmin 面板中,过滤器interest_id =3 的查询返回此表:

在此处输入图像描述

我尝试在 Spring Data JPA 中通过内部连接查询在本机查询中实现此过滤器查询:

@Query(value = "select user_id from user_interests inner join user_interest_ids on interest_id = ?1", nativeQuery = true)
Set<Integer> findUsersByInterest(int interestID);

此内部连接查询返回所有用户,而不仅仅是兴趣 id 为 3 的用户。

我试图在堆栈溢出和互联网上的其他来源中找到一些有用的资源,不幸的是我无法找到对我的问题有用的资源。

您能否给我一些建议,如何将此查询实现为 Spring Data JPA 中的本机查询或其他来源的一些链接,我可以在其中找到对我的问题有用的资源。

我真的很感谢你的帮助。

4

0 回答 0