Sql Spring数据JPA。选择所有包含标签的帖子

Sql Spring数据JPA。选择所有包含标签的帖子,sql,many-to-many,spring-data,spring-data-jpa,Sql,Many To Many,Spring Data,Spring Data Jpa,我使用Spring数据。我有以下实体: @Entity class Post { @Id private Long id; private String message; @ManyToMany @JoinTable(name = "POST_TAG", joinColumns = { @JoinColumn(name = "POST_ID", referencedColumnName = "ID"), @

我使用Spring数据。我有以下实体:

@Entity
class Post {
    @Id
    private Long id;
    private String message;

    @ManyToMany
    @JoinTable(name = "POST_TAG", joinColumns = {
            @JoinColumn(name = "POST_ID", referencedColumnName = "ID"),
            @JoinColumn(name = "TAG_ID", referencedColumnName = "ID")
    })
    private Set<Tag> tags;
}

@Entity
class Tag {
    @Id
    private Long id;
    private String name;
}
在PostRepository中,我希望有两种方法:

查找至少包含一个或多个指定标记的所有帖子。 查找包含所有指定标记的所有帖子。 比如:

List<Post> findByTagsContainsAnyOf(List<String> tags);
List<Post> findByTagsContainsAll(List<String> tags);
第一个是easy-List findByTagsInList标记。请注意,它是列表而不是列表,因为它是映射到Post的标记,而不是字符串。如果您想坚持使用列表,则必须使用@Query。类似于@QuerySELECT p FROM Post p其中p.tags包含SELECT t FROM Tag t其中t.name IN:tags应该起作用

第二个操作必须通过@Query完成,在Post和Tag实体之间放置一个连接

一般来说,JPA只是SQL上的面向对象API。因此,如果有疑问,请创建SQL,然后将其转换为等效的JPQL。在JPQL简单的地方,可以将其编码为方法名,依靠Spring数据查询创建框架从方法名生成JPQL