Hibernate Spring JPA获取OneToMany关系的子集

Hibernate Spring JPA获取OneToMany关系的子集,hibernate,spring-data-jpa,Hibernate,Spring Data Jpa,我有两张桌子 文章 评论 在存储库中: interface ArticlesRepository : JpaRepository<Article, Long>{ fun findArticlesByUsername(username:String):List<Article> } 我想通过user\u z 因此,结果将是: - article_a - comment_2 by user_z - article_b - article_c 对不

我有两张桌子

  • 文章
  • 评论
在存储库中:

interface ArticlesRepository : JpaRepository<Article, Long>{
    
    fun findArticlesByUsername(username:String):List<Article>
}
我想通过
user\u z
因此,结果将是:

- article_a
  - comment_2 by user_z
- article_b
- article_c
对不起,我是新来的,我正在尝试使用最佳实践来做这件事


谢谢

@Fetch
注释不会帮助您,因为它不会影响筛选

我想你可以尝试在这里使用
@Filter
注释

  • 您可以通过以下方式更正映射:
  • @实体(name=“articles”)
    数据类文章(
    // ...
    @独身癖
    @滤器(
    name=“commentUser”,
    条件=“用户名=:名称”
    )
    val注释:列表,
    )
    
  • 然后,您可以启用过滤器:
  • entityManager
    .unwrap(Session.class)
    .enableFilter(“commentUser”)
    .setParameter(“名称”、“用户_z”);
    
  • 然后调用
    ArticlesRepository.findArticlesByUsername
    方法
  • 另请参见hibernate文档的第1部分


    另外,我不熟悉Kotlin,因此语法可能需要更正。

    是否可以将筛选器与
    ArticlesRepository.findAll
    一起使用?as
    ArticlesRepository.findArticlesByUsername
    将立即按用户名筛选文章。实际上,我无法使用存储库让筛选器工作,但使用
    entityManager.createQuery(“从文章a中选择a”)
    是,该过滤器应适用于
    ArticlesRepository.findAll
    以及
    ArticlesRepository.findArticlesByUsername
    以及更一般地适用于在
    from
    子句中使用
    Article
    的所有查询。请参阅另一个示例答案。谢谢,我发现它缺少
    @Transactional
    interface ArticlesRepository : JpaRepository<Article, Long>{
        
        fun findArticlesByUsername(username:String):List<Article>
    }
    
    - article_a
      - comment_1 by user_x
      - comment_2 by user_z
    - article_b
      - comment_1 by user_x
    - article_c
    
    - article_a
      - comment_2 by user_z
    - article_b
    - article_c