如何在 @OneToMany 关系映射的列上使用 JPA findBy 查询?

Posted

技术标签:

【中文标题】如何在 @OneToMany 关系映射的列上使用 JPA findBy 查询?【英文标题】:How to use JPA findBy query on column mapped by @OneToMany relationship? 【发布时间】:2022-01-20 08:11:41 【问题描述】:

如何使用 jpa 查询从具有@OneToMany 关系的列中查找记录?

Post.class

public class Post 
  @Id
  private String id;
  ...
  ...
  
  @OneToMany(cascade = CascadeType.ALL, mappedBy = "comment", fetch = FetchType.LAZY)
  private Set<Comment> comments;


评论类

public class Comment 
  ...
  ...

  @ManyToOne(fetch = FetchType.LAZY, optional = false)
  @JoinColumn(name = "comment", referencedColumnName = "id")
  private Post post;


有什么方法可以查询PostRepository 并使用commentId 找到Post

【问题讨论】:

【参考方案1】:

要通过 commentId 查找,您只需在存储库界面中创建一个函数:

List<Comment> findByPost(Post post);

然后在查询时添加:

Post post = new Post();
post.setId(yourId);
repository.findByPost(post);

【讨论】:

【参考方案2】:

假设Comment 具有String id 属性,您可以这样做:

public interface PostRepository extends JpaRepository<Post, String> 
    List<Post> findByCommentsId(String id);

您可以在以下位置阅读更多相关信息:

https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#repository-query-keywords https://docs.spring.io/spring-data/jpa/docs/current/reference/html/#jpa.query-methods.query-creation

【讨论】:

以上是关于如何在 @OneToMany 关系映射的列上使用 JPA findBy 查询?的主要内容,如果未能解决你的问题,请参考以下文章

如何正确映射@OneToMany 和@ManyToOne 关系,以便我可以保存和更新@OneToMany 端(有或没有@ManyToOne 端)

Hibernate:映射@OneToMany 关系的最后一行

Hibernate创建没有关系表的关系

如何使用 Hibernate Criteria 连接两个具有 OneToMany 关系的表

如何在 JPA 中定义单向 OneToMany 关系

子表在 JPA 中的 OneToMany 关系中没有映射