2016-12-14 40 views
0

我试图做一个查询来搜索我的应用程序包含关键字上的内容或标签名称,但只有公开的所有帖子。我试图做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)") 

我看过的文档,但我没有看到任何选项来管理这个,什么是最好的方式去这里?

谢谢!

回答

2

由于多个tag可以与post相关联,因此该关系是@OneToManyPostTag。 A join应该在这种情况下工作。

试试这个。

@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:我没有测试过这一点,但它应该工作。

+0

是的,最后我是这样做的。我认为Spring Data有另一种方法可以做到这一点,但这是这种情况下唯一的答案。它工作得很好,谢谢! –

+0

很高兴帮助! –