一尘不染

休眠:选择集合中包含所有指定值的实体

hibernate

我需要一个棘手的hibernate查询问题的帮助。我有以下实体:

public class Book {
   private String bookId;
   private String author;
   private String isbn;
   private Set<Tag> tags;
   // getters, setters etc.
}

public class Tag  {
   private String tagId;
   private String tagName;
  // getters, setters, etc.
}

两者之间存在多对多关联,这由联接表books_tags_mn和book_id和tag_id列表示。

我喜欢做的事情是:我要创建一个Hibernate查询/标准查询,返回所有的书,有 所有的 一组特定的标签。什么工作是选择具有所有书籍 的任何
一组的标签。

我一直在使用标准API,但并没有真正理解它。所以我想做的事(使用伪HQL)

from Book book where book.tags containsAll(:tags)

在此方面的任何帮助将不胜感激,因此,非常感谢您。


阅读 261

收藏
2020-06-20

共1个答案

一尘不染

您可以使用以下查询:

select book from Book book
where :numberOfTags = (select count(tag.id) from Book book2
                       inner join book2.tags tag
                       where book2.id = book.id
                       and tag in (:tags))

这里numberOfTags是标签在组标签必须匹配的数量。

2020-06-20