使用JPA和Spring查找具有对象列表的不同行

使用JPA和Spring查找具有对象列表的不同行,spring,hibernate,jpa,many-to-many,Spring,Hibernate,Jpa,Many To Many,我在标签和帖子之间有一种多对多的关系。我需要编写jpa查询来按标签列表查找所有帖子。我可以这样做:findDistinctByTagsIn(列表标签),它可以工作,但我需要自定义查询。我试过了 @Query("SELECT DISTINCT p FROM Post p WHERE p.tags IN :tags") 但这给了我一个错误: select distinct post0_.id as id1_0_, post0_.content as content2_0_, post0_.name

我在标签和帖子之间有一种多对多的关系。我需要编写jpa查询来按标签列表查找所有帖子。我可以这样做:findDistinctByTagsIn(列表标签),它可以工作,但我需要自定义查询。我试过了

@Query("SELECT DISTINCT p FROM Post p WHERE p.tags IN :tags")
但这给了我一个错误:

select distinct post0_.id as id1_0_, post0_.content as content2_0_, post0_.name as name3_0_, post0_.user_id as user_id4_0_ from posts post0_ cross join posts_tags tags1_, tags tag2_ where post0_.id=tags1_.posts_id and tags1_.tags_id=tag2_.id and (. in (? , ?))
post实体中的字段:

@ManyToMany(cascade = {CascadeType.MERGE, CascadeType.PERSIST})
private List<Tag> tags = new ArrayList<>();
@ManyToMany(cascade={CascadeType.MERGE,CascadeType.PERSIST})
private List tags=new ArrayList();
标记实体中的字段:

@ManyToMany(cascade = {CascadeType.PERSIST, CascadeType.MERGE}, mappedBy = "tags")
private List<Post> posts = new ArrayList<>();
@manytomy(cascade={CascadeType.PERSIST,CascadeType.MERGE},mappedBy=“tags”)
private List posts=new ArrayList();

有人知道怎么回事吗?我尝试了join,但仍然不知道如何执行它

如果您想编写自定义查询,可以使用JPA规范。以下是有关详细信息的链接:-


您可以将@Query与JPQL一起使用,也可以将@Query与SQL一起使用

@使用JPQL方法进行查询

公共接口模型jparepoaitory扩展了JpaRepository{

@Query(“select m from model m where modelname= :name)
List<Model> findModelsByName(@Param(“name”) String name);
}


@***Query with SQL approach***
public interface ModelJpaRepoaitory extends JpaRepository<Model , Long> {
@Query(“select m from model m where modelname= :name , nativeQuery=true)
List<Model> findModelsByName(@Param(“name”) String name);
}
@Query(“从模型m中选择m,其中modelname=:name)
列出FindModelByName(@Param(“name”)字符串名称);
}
@***使用SQL方法进行查询***
公共接口模型jparepoaitory扩展了JpaRepository{
@查询(“从模型m中选择m,其中modelname=:name,nativeQuery=true)
列出FindModelByName(@Param(“name”)字符串名称);
}

这是“Spring数据规范”,而不是“JPA规范”。JPA规范根本没有所谓的“规范”,正如任何JPQL文档所告诉您的,IN是用于
{single_value}的{list_of_values}
,而您并没有这样做。我希望JPA提供程序给出一个比那个更清晰的错误消息