2016-12-14 39 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

很高興幫助! –