Java 弹簧靴&x2B;Jpa:如何让这个查找方法工作?

Java 弹簧靴&x2B;Jpa:如何让这个查找方法工作?,java,mysql,spring,spring-boot,jpa,Java,Mysql,Spring,Spring Boot,Jpa,我有一个问题,我找不到最后的答案。我有一个Post实体和一个Tag实体,如您在下面看到的。出于空间原因,我只添加了必要的代码。我也使用MySQL作为数据库 @Entity public class Post { @ManyToMany(cascade = CascadeType.ALL) @JoinTable(name = "POST_TAG", joinColumns = {@JoinColumn(name = "post_id")},

我有一个问题,我找不到最后的答案。我有一个Post实体和一个Tag实体,如您在下面看到的。出于空间原因,我只添加了必要的代码。我也使用MySQL作为数据库

@Entity
public class Post {

    @ManyToMany(cascade = CascadeType.ALL)
    @JoinTable(name = "POST_TAG", joinColumns = {@JoinColumn(name = "post_id")},
            inverseJoinColumns = {@JoinColumn(name = "tag_id")})
    private Set<Tag> tags = new HashSet<>();
正如您所看到的,这两个实体之间有很多关系,因此我在数据库中它们之间有一个中间表。因此,这两个实体在中间的表中相互引用。因此,我在Post表中没有标记名称


如何通过输入特定的标记名来创建一个查找所有帖子的方法?

很明显,错误表明类型Post没有标记名。
您可以使用查询注释并编写sql查询来联接表并按标记名进行查找。

很明显,错误表明Post类型没有标记名。
您可以使用查询注释和编写sql查询来联接表并按标记名进行查找。

实际上,不需要自定义查询,只需要指定与属性名完全相同的查询,因此您还需要使用复数

另外,我想,您的标记实体中有一个属性名称

它看起来像这样:

 List<Post> findAllByTagsNameOrderByCreatedAt(String name);
列出findAllByTagsNameOrderByCreatedAt(字符串名称);

实际上,不需要自定义查询,只需要指定与属性名完全相同的查询,因此也需要使用复数

另外,我想,您的标记实体中有一个属性名称

它看起来像这样:

 List<Post> findAllByTagsNameOrderByCreatedAt(String name);
列出findAllByTagsNameOrderByCreatedAt(字符串名称);

是的,非常感谢。所以,当我在JPA中进行查询时,我总是必须使用我使用的属性的确切字段名?假设如果我想搜索所有帖子,我应该使用
posts
而不是
post
no?您必须使用您在实体类中用作字段变量名的名称。假设在您的标记实体类中,您的Post字段为“posts”,因此在查询时,您必须在tagrepositoryp中使用“posts”,非常感谢。所以,当我在JPA中进行查询时,我总是必须使用我使用的属性的确切字段名?假设如果我想搜索所有帖子,我应该使用
posts
而不是
post
no?您必须使用您在实体类中用作字段变量名的名称。假设在标记实体类中,Post字段为“posts”,所以在查询时,必须在标记存储库中使用“posts”
IllegalArgumentException: Failed to create query for method public abstract java.util.List com.example.blogApp2.repository.PostRepository.findAllByTagByNameOrderByCreatedAt(java.lang.String)! No property tagByName found for type Post!
 List<Post> findAllByTagsNameOrderByCreatedAt(String name);