【问题标题】:Access collection field in Spring Repository with custom Query使用自定义查询访问 Spring Repository 中的集合字段
【发布时间】:2016-12-14 00:42:00
【问题描述】:

我正在尝试进行查询以搜索我的应用程序中包含内容或标签名称关键字的所有帖子,但仅搜索那些公开的帖子。我正在尝试进行 JPQL 搜索,但我不知道如何访问 tags.name 属性。

注意:Post 是一个具有Tag 实体列表的实体;

我已经尝试过了,但它不起作用(如我所料):

@Query("SELECT p FROM Post p WHERE (p.content LIKE CONCAT('%', LOWER(:keyword),'%' OR p.tags.name LIKE CONCAT('%', LOWER(:keyword)) AND (p.open IS TRUE)")

我查看了文档,但没有看到任何管理此问题的选项,最好的方法是什么?

谢谢!

【问题讨论】:

    标签: java spring-data jpql


    【解决方案1】:

    由于多个tags 可以与post 相关联,因此关系是从PostTag@OneToManyjoin 应该在这种情况下工作。

    试试这个。

    @Query("SELECT p FROM Post p left join p.tags pTags WHERE (p.content LIKE CONCAT('%',LOWER(:keyword),'%' OR pTags.name LIKE CONCAT('%',LOWER(:keyword)) AND (p.open IS TRUE)")
    

    PS:我还没有测试过,但它应该可以工作。

    【讨论】:

    • 是的,最后我是这样做的。我虽然 Spring Data 有另一种方法可以做到这一点,但这是这种情况下的唯一答案。它运行良好,谢谢!
    • 很高兴它有帮助!
    猜你喜欢
    • 2019-12-23
    • 2016-01-30
    • 1970-01-01
    • 2020-11-12
    • 2018-02-02
    • 1970-01-01
    • 2020-04-16
    • 1970-01-01
    • 2020-05-11
    相关资源
    最近更新 更多