2016-12-14 1 views
0

Ich versuche eine Abfrage zu erstellen, um alle Posts aus meiner Anwendung zu durchsuchen, die ein Schlüsselwort für den Inhalt oder den Tagnamen enthalten, aber nur für die öffentlichen. Ich versuche, die JPQL-Suche zu machen, aber ich weiß nicht, wie ich auf die Eigenschaft tags.name zugreifen kann.Zugriff auf Sammlungsfeld in Spring Repository mit benutzerdefinierter Abfrage

Hinweis: Post ist eine Entität, die eine Liste von Tag Entität hat;

ich das versucht, aber es funktioniert nicht (wie ich erwartet hatte):

@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)") 

ich in der Dokumentation ausgesehen haben, aber ich sehe keine Möglichkeit, das zu verwalten, was ist der beste Weg zu gehen Hier?

Danke!

Antwort

2

Da mehrere tag s können mit einem post die Beziehung ist ein @OneToMany aus Post zu Tag zugeordnet sein. A join sollte in diesem Szenario funktionieren.

Versuchen Sie es.

@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: ich dies nicht getestet, aber es sollte funktionieren.

+0

Ja, endlich habe ich es so gemacht. Ich weiß zwar, dass Spring Data einen anderen Weg hat, aber das ist die einzige Antwort in diesem Fall. Es funktioniert perfekt, danke! –

+0

Froh, dass es geholfen hat! –

Verwandte Themen