使用join和in子句查询仅返回in子句

时间:2019-06-05 16:54:46

标签: sql spring jpa

我有一个名为items的表,它与一个名为tag的表连接在一起。我希望能够搜索包含指定标签列表的所有项目。我所拥有的正在工作,但是即使该项目具有更多关联的标签,它也只会返回查询中列出的标签。如果它具有我要搜索的标签集,我想将所有相关标签带回该项目

  @Query("select d from DataItem d left join fetch d.tags t where t in (:tags)" )
  Set<DataItem> findDistinctByTags(@Param("tags") Set<Tag> tags);

如果我有一个带有标签foo和bar的项目,并搜索带有foo标签的项目,我会找回一个正确的项目,但它只会带有foo的标签。我也想在查询中返回bar标签。

1 个答案:

答案 0 :(得分:1)

尝试以下语句:

@Query("select d from DataItem d left join fetch d.tags t where d.tags in (:tags)" )

例如,使用SQL并检查生成的查询,这也是为spring应用程序打开spring.jpa.show-sql=true日志记录的一种好方法。它会帮助您进行故障排除。