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

时间:2018-08-30 20:46:24

标签: spring hibernate jpa many-to-many

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

@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 (? , ?))

帖子实体中的字段:

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

字段:

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

有人知道什么地方错了吗?我尝试了加入,但仍然不知道该怎么做

2 个答案:

答案 0 :(得分:0)

您可以在JPQL上使用@Query或在SQL上使用@Query

@ 使用JPQL方法查询

公共接口ModelJpaRepoaitory扩展了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);
}

答案 1 :(得分:-1)

如果要编写自定义查询,则可以使用JPA规范。这是更多信息的链接:-

https://www.baeldung.com/rest-api-search-language-spring-data-specifications